Index: lib/src/compiler/error_helpers.dart |
diff --git a/lib/src/report.dart b/lib/src/compiler/error_helpers.dart |
similarity index 68% |
rename from lib/src/report.dart |
rename to lib/src/compiler/error_helpers.dart |
index 9d7df27f81f9a2f9974cd4faf1b727ddf18223f8..b0ab067ce8219a65d513ade54f7c9c938e4bf90f 100644 |
--- a/lib/src/report.dart |
+++ b/lib/src/compiler/error_helpers.dart |
@@ -1,54 +1,55 @@ |
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
+// 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. |
+import 'package:analyzer/analyzer.dart' |
+ show AnalysisError, ErrorSeverity, StaticWarningCode; |
+import 'package:analyzer/source/error_processor.dart' show ErrorProcessor; |
import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; |
-import 'package:analyzer/src/generated/error.dart'; |
-import 'package:logging/logging.dart'; |
import 'package:path/path.dart' as path; |
-import 'package:analyzer/source/error_processor.dart'; |
-final _checkerLogger = new Logger('dev_compiler.checker'); |
- |
-/// Collects errors, and then sorts them and sends them |
-class ErrorCollector implements AnalysisErrorListener { |
- final AnalysisContext _context; |
- final AnalysisErrorListener listener; |
- final List<AnalysisError> _errors = []; |
- |
- ErrorCollector(this._context, this.listener); |
- |
- /// Flushes errors to the log. Until this is called, errors are buffered. |
- void flush() { |
- // TODO(jmesserly): this code was taken from analyzer_cli. |
- // sort errors |
- _errors.sort((AnalysisError error1, AnalysisError error2) { |
- // severity |
- var severity1 = errorSeverity(_context, error1); |
- var severity2 = errorSeverity(_context, error2); |
- int compare = severity2.compareTo(severity1); |
- if (compare != 0) return compare; |
- |
- // path |
- compare = Comparable.compare(error1.source.fullName.toLowerCase(), |
- error2.source.fullName.toLowerCase()); |
- if (compare != 0) return compare; |
- |
- // offset |
- compare = error1.offset - error2.offset; |
- if (compare != 0) return compare; |
- |
- // compare message, in worst case. |
- return error1.message.compareTo(error2.message); |
- }); |
- |
- _errors.forEach(listener.onError); |
- _errors.clear(); |
- } |
+// TODO(jmesserly): this code was taken from analyzer_cli. |
+// It really should be in some common place so we can share it. |
+// TODO(jmesserly): this shouldn't depend on `context` but we need it to compute |
+// `errorSeverity` due to some APIs that need fixing. |
+void sortErrors(AnalysisContext context, List<AnalysisError> errors) { |
+ errors.sort((AnalysisError error1, AnalysisError error2) { |
+ // severity |
+ var severity1 = errorSeverity(context, error1); |
+ var severity2 = errorSeverity(context, error2); |
+ int compare = severity2.compareTo(severity1); |
+ if (compare != 0) return compare; |
+ |
+ // path |
+ compare = Comparable.compare(error1.source.fullName.toLowerCase(), |
+ error2.source.fullName.toLowerCase()); |
+ if (compare != 0) return compare; |
+ |
+ // offset |
+ compare = error1.offset - error2.offset; |
+ if (compare != 0) return compare; |
+ |
+ // compare message, in worst case. |
+ return error1.message.compareTo(error2.message); |
+ }); |
+} |
- void onError(AnalysisError error) { |
- _errors.add(error); |
- } |
+// TODO(jmesserly): this was from analyzer_cli, we should factor it differently. |
+String formatError(AnalysisContext context, AnalysisError error) { |
+ var severity = errorSeverity(context, error); |
+ // Skip hints, some like TODOs are not useful. |
+ if (severity.ordinal <= ErrorSeverity.INFO.ordinal) return null; |
+ |
+ var lineInfo = context.computeLineInfo(error.source); |
+ var location = lineInfo.getLocation(error.offset); |
+ |
+ // [warning] 'foo' is not a... (/Users/.../tmp/foo.dart, line 1, col 2) |
+ return (new StringBuffer() |
+ ..write('[${severity.displayName}] ') |
+ ..write(error.message) |
+ ..write(' (${path.prettyUri(error.source.uri)}') |
+ ..write(', line ${location.lineNumber}, col ${location.columnNumber})')) |
+ .toString(); |
} |
ErrorSeverity errorSeverity(AnalysisContext context, AnalysisError error) { |
@@ -180,37 +181,3 @@ ErrorSeverity errorSeverity(AnalysisContext context, AnalysisError error) { |
return ErrorProcessor.getProcessor(context, error)?.severity ?? |
error.errorCode.errorSeverity; |
} |
- |
-/// Simple reporter that logs checker messages as they are seen. |
-class LogReporter implements AnalysisErrorListener { |
- final AnalysisContext _context; |
- final bool useColors; |
- final List<AnalysisError> _errors = []; |
- |
- LogReporter(this._context, {this.useColors: false}); |
- |
- void onError(AnalysisError error) { |
- var level = _severityToLevel[errorSeverity(_context, error)]; |
- |
- // TODO(jmesserly): figure out what to do with the error's name. |
- var lineInfo = _context.computeLineInfo(error.source); |
- var location = lineInfo.getLocation(error.offset); |
- |
- // [warning] 'foo' is not a... (/Users/.../tmp/foo.dart, line 1, col 2) |
- var text = new StringBuffer() |
- ..write('[${error.errorCode.name}] ') |
- ..write(error.message) |
- ..write(' (${path.prettyUri(error.source.uri)}') |
- ..write(', line ${location.lineNumber}, col ${location.columnNumber})'); |
- |
- // TODO(jmesserly): just print these instead of sending through logger? |
- _checkerLogger.log(level, text); |
- } |
-} |
- |
-// TODO(jmesserly): remove log levels, instead just use severity. |
-const _severityToLevel = const { |
- ErrorSeverity.ERROR: Level.SEVERE, |
- ErrorSeverity.WARNING: Level.WARNING, |
- ErrorSeverity.INFO: Level.INFO |
-}; |