Index: pkg/front_end/lib/src/fasta/messages.dart |
diff --git a/pkg/front_end/lib/src/fasta/messages.dart b/pkg/front_end/lib/src/fasta/messages.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a4e4939fd401865d9ea6f321bd02275245977b83 |
--- /dev/null |
+++ b/pkg/front_end/lib/src/fasta/messages.dart |
@@ -0,0 +1,74 @@ |
+// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library fasta.messages; |
+ |
+import 'package:kernel/ast.dart' show |
+ Location, |
+ Program; |
+ |
+import 'util/relativize.dart' show |
+ relativizeUri; |
+ |
+import 'compiler_context.dart' show |
+ CompilerContext; |
+ |
+import 'errors.dart' show |
+ InputError; |
+ |
+import 'colors.dart' show |
+ cyan, |
+ magenta; |
+ |
+const bool hideNits = false; |
+ |
+const bool hideWarnings = false; |
+ |
+void warning(Uri uri, int charOffset, String message) { |
+ if (hideWarnings) return; |
+ print(format(uri, charOffset, colorWarning("Warning: $message"))); |
+ if (CompilerContext.current.options.areWarningsFatal) { |
+ if (CompilerContext.current.options.verbose) print(StackTrace.current); |
+ throw new InputError( |
+ uri, charOffset, "Compilation aborted due to fatal warnings."); |
+ } |
+} |
+ |
+void nit(Uri uri, int charOffset, String message) { |
+ if (hideNits) return; |
+ print(format(uri, charOffset, colorNit("Nit: $message"))); |
+ if (CompilerContext.current.options.areNitsFatal) { |
+ if (CompilerContext.current.options.verbose) print(StackTrace.current); |
+ throw new InputError( |
+ uri, charOffset, "Compilation aborted due to fatal nits."); |
+ } |
+} |
+ |
+String colorWarning(String message) { |
+ // TODO(ahe): Colors need to be optional. Doesn't work well in Emacs or on |
+ // Windows. |
+ return magenta(message); |
+} |
+ |
+String colorNit(String message) { |
+ // TODO(ahe): Colors need to be optional. Doesn't work well in Emacs or on |
+ // Windows. |
+ return cyan(message); |
+} |
+ |
+String format(Uri uri, int charOffset, String message) { |
+ if (uri != null) { |
+ String path = relativizeUri(uri); |
+ String position = charOffset == -1 |
+ ? path : "${getLocation(path, charOffset)}"; |
+ return "$position: $message"; |
+ } else { |
+ return message; |
+ } |
+} |
+ |
+Location getLocation(String path, int charOffset) { |
+ return new Program(null, CompilerContext.current.uriToSource) |
+ .getLocation(path, charOffset); |
+} |