Add support for the manifest checks in analyzer_cli
Change-Id: I8d2670cca509cf2229f5475e355e3b85b1ca2f30
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/99220
Commit-Queue: Keerti Parthasarathy <keertip@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index 7e910dc..44e1838 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -24,6 +24,7 @@
import 'package:analyzer/src/generated/utilities_general.dart'
show PerformanceTag;
import 'package:analyzer/src/plugin/resolver_provider.dart';
+import 'package:analyzer/src/manifest/manifest_validator.dart';
import 'package:analyzer/src/pubspec/pubspec_validator.dart';
import 'package:analyzer/src/source/package_map_resolver.dart';
import 'package:analyzer/src/source/path_filter.dart';
@@ -378,6 +379,25 @@
} catch (exception) {
// If the file cannot be analyzed, ignore it.
}
+ } else if (shortName == AnalysisEngine.ANDROID_MANIFEST_FILE) {
+ try {
+ File file = resourceProvider.getFile(path);
+ String content = file.readAsStringSync();
+ ManifestValidator validator =
+ new ManifestValidator(file.createSource());
+ LineInfo lineInfo = new LineInfo.fromContent(content);
+ List<AnalysisError> errors = validator.validate(
+ content, analysisDriver.analysisOptions.chromeOsManifestChecks);
+ formatter
+ .formatErrors([new AnalysisErrorInfoImpl(errors, lineInfo)]);
+ for (AnalysisError error in errors) {
+ ErrorSeverity severity = determineProcessedSeverity(
+ error, options, analysisDriver.analysisOptions);
+ allResult = allResult.max(severity);
+ }
+ } catch (exception) {
+ // If the file cannot be analyzed, ignore it.
+ }
} else {
dartFiles.add(path);
var file = analysisDriver.fsState.getFileForPath(path);
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index aa44888..385f323 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -806,6 +806,32 @@
expect(exitCode, 0);
});
}
+
+ test_manifestFileChecks() async {
+ await withTempDirAsync((tempDir) async {
+ String filePath =
+ path.join(tempDir, AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE);
+ new File(filePath).writeAsStringSync('''
+analyzer:
+ optional-checks:
+ chrome-os-manifest-checks: true
+''');
+ String manifestPath =
+ path.join(tempDir, AnalysisEngine.ANDROID_MANIFEST_FILE);
+ new File(manifestPath).writeAsStringSync('''
+<manifest
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <uses-feature android:name="android.software.home_screen" />
+</manifest>
+''');
+ await drive(manifestPath, options: filePath);
+ expect(
+ bulletToDash(outSink),
+ contains(
+ "warning - This hardware feature is not supported on Chrome OS"));
+ expect(exitCode, 0);
+ });
+ }
}
@reflectiveTest