OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 /// Command line tool to run the checker on a Dart program. | 5 /// Command line tool to run the checker on a Dart program. |
6 library dev_compiler.devc; | 6 library dev_compiler.devc; |
7 | 7 |
8 import 'dart:async'; | 8 import 'dart:async'; |
9 import 'dart:convert'; | 9 import 'dart:convert'; |
10 import 'dart:io'; | 10 import 'dart:io'; |
11 | 11 |
12 import 'package:analyzer/src/generated/error.dart' as analyzer; | 12 import 'package:analyzer/src/generated/error.dart' |
| 13 show AnalysisError, ErrorSeverity, ErrorType; |
13 import 'package:analyzer/src/generated/engine.dart' | 14 import 'package:analyzer/src/generated/engine.dart' |
14 show AnalysisContext, ChangeSet; | 15 show AnalysisContext, ChangeSet; |
15 import 'package:analyzer/src/generated/source.dart' show Source; | 16 import 'package:analyzer/src/generated/source.dart' show Source; |
16 import 'package:logging/logging.dart' show Level, Logger, LogRecord; | 17 import 'package:logging/logging.dart' show Level, Logger, LogRecord; |
17 import 'package:path/path.dart' as path; | 18 import 'package:path/path.dart' as path; |
18 import 'package:shelf/shelf.dart' as shelf; | 19 import 'package:shelf/shelf.dart' as shelf; |
19 import 'package:shelf/shelf_io.dart' as shelf; | 20 import 'package:shelf/shelf_io.dart' as shelf; |
20 import 'package:shelf_static/shelf_static.dart' as shelf_static; | 21 import 'package:shelf_static/shelf_static.dart' as shelf_static; |
21 | 22 |
22 import 'src/analysis_context.dart'; | 23 import 'src/analysis_context.dart'; |
23 import 'src/checker/checker.dart'; | 24 import 'src/checker/checker.dart'; |
24 import 'src/checker/rules.dart'; | 25 import 'src/checker/rules.dart'; |
25 import 'src/codegen/code_generator.dart' show CodeGenerator; | 26 import 'src/codegen/code_generator.dart' show CodeGenerator; |
26 import 'src/codegen/html_codegen.dart'; | 27 import 'src/codegen/html_codegen.dart'; |
27 import 'src/codegen/js_codegen.dart'; | 28 import 'src/codegen/js_codegen.dart'; |
28 import 'src/dependency_graph.dart'; | 29 import 'src/dependency_graph.dart'; |
29 import 'src/info.dart' | 30 import 'src/info.dart' |
30 show AnalyzerError, CheckerResults, LibraryInfo, LibraryUnit; | 31 show AnalyzerMessage, CheckerResults, LibraryInfo, LibraryUnit; |
31 import 'src/options.dart'; | 32 import 'src/options.dart'; |
32 import 'src/report.dart'; | 33 import 'src/report.dart'; |
33 import 'src/utils.dart'; | 34 import 'src/utils.dart'; |
34 | 35 |
35 /// Sets up the type checker logger to print a span that highlights error | 36 /// Sets up the type checker logger to print a span that highlights error |
36 /// messages. | 37 /// messages. |
37 StreamSubscription setupLogger(Level level, printFn) { | 38 StreamSubscription setupLogger(Level level, printFn) { |
38 Logger.root.level = level; | 39 Logger.root.level = level; |
39 return Logger.root.onRecord.listen((LogRecord rec) { | 40 return Logger.root.onRecord.listen((LogRecord rec) { |
40 printFn('${rec.level.name.toLowerCase()}: ${rec.message}'); | 41 printFn('${rec.level.name.toLowerCase()}: ${rec.message}'); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 for (var cg in _generators) { | 195 for (var cg in _generators) { |
195 var hash = cg.generateLibrary(libraryUnit, current); | 196 var hash = cg.generateLibrary(libraryUnit, current); |
196 if (_hashing) node.cachingHash = hash; | 197 if (_hashing) node.cachingHash = hash; |
197 } | 198 } |
198 _reporter.leaveLibrary(); | 199 _reporter.leaveLibrary(); |
199 } | 200 } |
200 | 201 |
201 /// Log any errors encountered when resolving [source] and return whether any | 202 /// Log any errors encountered when resolving [source] and return whether any |
202 /// errors were found. | 203 /// errors were found. |
203 bool logErrors(Source source) { | 204 bool logErrors(Source source) { |
204 List<analyzer.AnalysisError> errors = context.getErrors(source).errors; | 205 context.computeErrors(source); |
| 206 List<AnalysisError> errors = context.getErrors(source).errors; |
205 bool failure = false; | 207 bool failure = false; |
206 if (errors.isNotEmpty) { | 208 if (errors.isNotEmpty) { |
207 for (var error in errors) { | 209 for (var error in errors) { |
208 var message = new AnalyzerError.from(error); | 210 // Always skip TODOs. |
| 211 if (error.errorCode.type == ErrorType.TODO) continue; |
| 212 |
| 213 // Skip hints for now. In the future these could be turned on via flags. |
| 214 if (error.errorCode.errorSeverity.ordinal < |
| 215 ErrorSeverity.WARNING.ordinal) { |
| 216 continue; |
| 217 } |
| 218 |
| 219 var message = new AnalyzerMessage.from(error); |
209 if (message.level == Level.SEVERE) failure = true; | 220 if (message.level == Level.SEVERE) failure = true; |
210 _reporter.log(message); | 221 _reporter.log(message); |
211 } | 222 } |
212 } | 223 } |
213 return failure; | 224 return failure; |
214 } | 225 } |
215 | 226 |
216 CheckerResults run() { | 227 CheckerResults run() { |
217 var clock = new Stopwatch()..start(); | 228 var clock = new Stopwatch()..start(); |
218 | 229 |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 // Note: the cache-control header should be enough, but this doesn't hurt | 337 // Note: the cache-control header should be enough, but this doesn't hurt |
327 // and can help renew the policy after it expires. | 338 // and can help renew the policy after it expires. |
328 headers['ETag'] = hash; | 339 headers['ETag'] = hash; |
329 } | 340 } |
330 return response.change(headers: headers); | 341 return response.change(headers: headers); |
331 }; | 342 }; |
332 } | 343 } |
333 | 344 |
334 final _log = new Logger('dev_compiler'); | 345 final _log = new Logger('dev_compiler'); |
335 final _earlyErrorResult = new CheckerResults(const [], null, true); | 346 final _earlyErrorResult = new CheckerResults(const [], null, true); |
OLD | NEW |