[pkg:analyzer] add an example of using the analysis context collection API
Change-Id: Ic00410c941861a791b549c799c113b5364ba6486
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/174981
Commit-Queue: Devon Carew <devoncarew@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/example/analyze.dart b/pkg/analyzer/example/analyze.dart
new file mode 100644
index 0000000..d9d5cb3
--- /dev/null
+++ b/pkg/analyzer/example/analyze.dart
@@ -0,0 +1,46 @@
+// 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/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 {
+ var entity = Directory.current;
+ if (args.isNotEmpty) {
+ String arg = args.first;
+ entity = FileSystemEntity.isDirectorySync(arg) ? Directory(arg) : File(arg);
+ }
+
+ var issueCount = 0;
+ final 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 (final context in collection.contexts) {
+ print('Analyzing ${context.contextRoot.root.path} ...');
+
+ for (final filePath in context.contextRoot.analyzedFiles()) {
+ if (!filePath.endsWith('.dart')) {
+ continue;
+ }
+
+ final errorsResult = await context.currentSession.getErrors(filePath);
+ for (final error in errorsResult.errors) {
+ if (error.errorCode.type != ErrorType.TODO) {
+ print(
+ ' \u001b[1m${error.source.shortName}\u001b[0m ${error.message}');
+ issueCount++;
+ }
+ }
+ }
+ }
+
+ print('$issueCount issues found.');
+}