Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(325)

Side by Side Diff: pkg/front_end/lib/src/fasta/messages.dart

Issue 2977013002: Report messages instead of just printing. (Closed)
Patch Set: Update expectations. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library fasta.messages; 5 library fasta.messages;
6 6
7 import 'dart:io' show exitCode;
8
9 import 'package:kernel/ast.dart' show Library, Location, Program, TreeNode; 7 import 'package:kernel/ast.dart' show Library, Location, Program, TreeNode;
10 8
11 import 'util/relativize.dart' show relativizeUri; 9 import 'util/relativize.dart' show relativizeUri;
12 10
13 import 'compiler_context.dart' show CompilerContext; 11 import 'compiler_context.dart' show CompilerContext;
14 12
15 import 'deprecated_problems.dart' show deprecated_InputError; 13 import 'fasta_codes.dart' show Message;
16 14
17 import 'colors.dart' show cyan, magenta; 15 import 'severity.dart' show Severity;
18
19 import 'fasta_codes.dart' show Message;
20 16
21 export 'fasta_codes.dart'; 17 export 'fasta_codes.dart';
22 18
23 const bool hideWarnings = false;
24
25 bool get errorsAreFatal => CompilerContext.current.options.errorsAreFatal;
26
27 bool get nitsAreFatal => CompilerContext.current.options.nitsAreFatal;
28
29 bool get warningsAreFatal => CompilerContext.current.options.warningsAreFatal;
30
31 bool get isVerbose => CompilerContext.current.options.verbose; 19 bool get isVerbose => CompilerContext.current.options.verbose;
32 20
33 bool get hideNits => !isVerbose;
34
35 bool get setExitCodeOnProblem {
36 return CompilerContext.current.options.setExitCodeOnProblem;
37 }
38
39 void warning(Message message, int charOffset, Uri uri) { 21 void warning(Message message, int charOffset, Uri uri) {
40 if (hideWarnings) return; 22 CompilerContext.current
41 print(deprecated_format( 23 .report(message.withLocation(uri, charOffset), Severity.warning);
42 uri, charOffset, colorWarning("Warning: ${message.message}")));
43 if (warningsAreFatal) {
44 if (isVerbose) print(StackTrace.current);
45 throw new deprecated_InputError(
46 uri, charOffset, "Compilation aborted due to fatal warnings.");
47 }
48 } 24 }
49 25
50 void nit(Message message, int charOffset, Uri uri) { 26 void nit(Message message, int charOffset, Uri uri) {
51 if (hideNits) return; 27 CompilerContext.current
52 print( 28 .report(message.withLocation(uri, charOffset), Severity.nit);
53 deprecated_format(uri, charOffset, colorNit("Nit: ${message.message}")));
54 if (nitsAreFatal) {
55 if (isVerbose) print(StackTrace.current);
56 throw new deprecated_InputError(
57 uri, charOffset, "Compilation aborted due to fatal nits.");
58 }
59 }
60
61 String colorWarning(String message) {
62 // TODO(ahe): Colors need to be optional. Doesn't work well in Emacs or on
63 // Windows.
64 return magenta(message);
65 }
66
67 String colorNit(String message) {
68 // TODO(ahe): Colors need to be optional. Doesn't work well in Emacs or on
69 // Windows.
70 return cyan(message);
71 }
72
73 String deprecated_format(Uri uri, int charOffset, String message) {
74 if (setExitCodeOnProblem) {
75 exitCode = 1;
76 }
77 if (uri != null) {
78 String path = relativizeUri(uri);
79 Location location = charOffset == -1 ? null : getLocation(path, charOffset);
80 String sourceLine = getSourceLine(location);
81 if (sourceLine == null) {
82 sourceLine = "";
83 } else {
84 sourceLine = "\n$sourceLine\n"
85 "${' ' * (location.column - 1)}^";
86 }
87 String position = location?.toString() ?? path;
88 return "$position: $message$sourceLine";
89 } else {
90 return message;
91 }
92 } 29 }
93 30
94 Location getLocation(String path, int charOffset) { 31 Location getLocation(String path, int charOffset) {
95 return CompilerContext.current.uriToSource[path] 32 return CompilerContext.current.uriToSource[path]
96 ?.getLocation(path, charOffset); 33 ?.getLocation(path, charOffset);
97 } 34 }
98 35
99 Location getLocationFromUri(Uri uri, int charOffset) { 36 Location getLocationFromUri(Uri uri, int charOffset) {
100 if (charOffset == -1) return null; 37 if (charOffset == -1) return null;
101 String path = relativizeUri(uri); 38 String path = relativizeUri(uri);
(...skipping 21 matching lines...) Expand all
123 program.libraries.clear(); 60 program.libraries.clear();
124 parent.parent = null; 61 parent.parent = null;
125 return result; 62 return result;
126 } else { 63 } else {
127 return null; 64 return null;
128 } 65 }
129 } else { 66 } else {
130 return node.location; 67 return node.location;
131 } 68 }
132 } 69 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698