| // Copyright (c) 2020, 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 'dart:io'; | |
| import 'package:analyzer/dart/analysis/analysis_context_collection.dart'; | |
| import 'package:analyzer/dart/analysis/results.dart'; | |
| import 'package:analyzer/error/error.dart'; | |
| import 'package:analyzer/file_system/physical_file_system.dart'; | |
| /// A simple example of using the AnalysisContextCollection API. | |
| void main(List<String> args) async { | |
| FileSystemEntity entity = Directory.current; | |
| if (args.isNotEmpty) { | |
| String arg = args.first; | |
| entity = FileSystemEntity.isDirectorySync(arg) ? Directory(arg) : File(arg); | |
| } | |
| var issueCount = 0; | |
| var collection = AnalysisContextCollection( | |
| includedPaths: [entity.absolute.path], | |
| resourceProvider: PhysicalResourceProvider.INSTANCE, | |
| ); | |
| // Often one context is returned, but depending on the project structure we | |
| // can see multiple contexts. | |
| for (var context in collection.contexts) { | |
| print('Analyzing ${context.contextRoot.root.path} ...'); | |
| for (var filePath in context.contextRoot.analyzedFiles()) { | |
| if (!filePath.endsWith('.dart')) { | |
| continue; | |
| } | |
| var errorsResult = await context.currentSession.getErrors(filePath); | |
| if (errorsResult is ErrorsResult) { | |
| for (var diagnostic in errorsResult.diagnostics) { | |
| if (diagnostic.diagnosticCode.type != DiagnosticType.TODO) { | |
| print( | |
| ' \u001b[1m${diagnostic.source.shortName}\u001b[0m ${diagnostic.message}', | |
| ); | |
| issueCount++; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| print('$issueCount issues found.'); | |
| } |