Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Unified Diff: pkg/analyzer/lib/src/task/options.dart

Issue 1418533004: Unsupported analysis option validation. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Warning type fix. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/generated/error.dart ('k') | pkg/analyzer/test/src/task/options_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/task/options.dart
diff --git a/pkg/analyzer/lib/src/task/options.dart b/pkg/analyzer/lib/src/task/options.dart
index 20b3bd3d393bef43819be6da5fd29a4437f89858..120f3059bd966d21562c95891a4471d04937e007 100644
--- a/pkg/analyzer/lib/src/task/options.dart
+++ b/pkg/analyzer/lib/src/task/options.dart
@@ -12,6 +12,7 @@ import 'package:analyzer/src/task/general.dart';
import 'package:analyzer/task/general.dart';
import 'package:analyzer/task/model.dart';
import 'package:source_span/source_span.dart';
+import 'package:yaml/yaml.dart';
/// The errors produced while parsing `.analysis_options` files.
///
@@ -49,7 +50,9 @@ class GenerateOptionsErrorsTask extends SourceBasedAnalysisTask {
List<AnalysisError> errors = <AnalysisError>[];
try {
- optionsProvider.getOptionsFromString(content);
+ Map<String, YamlNode> options =
+ optionsProvider.getOptionsFromString(content);
+ errors.addAll(_validate(options));
} on OptionsFormatException catch (e) {
SourceSpan span = e.span;
var error = new AnalysisError(source, span.start.column + 1, span.length,
@@ -63,6 +66,9 @@ class GenerateOptionsErrorsTask extends SourceBasedAnalysisTask {
outputs[ANALYSIS_OPTIONS_ERRORS] = errors;
}
+ List<AnalysisError> _validate(Map<String, YamlNode> options) =>
+ new OptionsFileValidator(source).validate(options);
+
/// Return a map from the names of the inputs of this kind of task to the
/// task input descriptors describing those inputs for a task with the
/// given [target].
@@ -74,3 +80,57 @@ class GenerateOptionsErrorsTask extends SourceBasedAnalysisTask {
AnalysisContext context, AnalysisTarget target) =>
new GenerateOptionsErrorsTask(context, target);
}
+
+/// Validates options defined in an `.analysis_options` file.
+class OptionsFileValidator {
+ // TODO(pq): consider an extension point.
+ static final List<OptionsValidator> _validators = [
+ new AnalyzerOptionsValidator()
+ ];
+
+ final Source source;
+ OptionsFileValidator(this.source);
+
+ List<AnalysisError> validate(Map<String, YamlNode> options) {
+ List<AnalysisError> errors = <AnalysisError>[];
+ _validators.forEach(
+ (OptionsValidator v) => errors.addAll(v.validate(source, options)));
+ return errors;
+ }
+}
+
+AnalysisError _unsupportedOption(
+ Source source, YamlScalar key, String pluginName) {
+ SourceSpan span = key.span;
+ return new AnalysisError(source, span.start.column + 1, span.length,
+ AnalysisOptionsWarningCode.UNSUPPORTED_OPTION, [pluginName, key.value]);
+}
+
+/// Validates options.
+abstract class OptionsValidator {
+ List<AnalysisError> validate(Source source, Map<String, YamlNode> options);
+}
+
+/// Validates `analyzer` options.
+class AnalyzerOptionsValidator extends OptionsValidator {
+ static const List<String> _supportedOptions = const [
+ 'exclude',
+ 'strong-mode'
+ ];
+
+ @override
+ List<AnalysisError> validate(Source source, Map<String, YamlNode> options) {
+ List<AnalysisError> errors = <AnalysisError>[];
+ YamlNode node = options['analyzer'];
+ if (node is YamlMap) {
+ node.nodes.forEach((k, v) {
+ if (k is YamlScalar) {
+ if (!_supportedOptions.contains(k.value)) {
+ errors.add(_unsupportedOption(source, k, 'analyzer'));
+ }
+ }
+ });
+ }
+ return errors;
+ }
+}
« no previous file with comments | « pkg/analyzer/lib/src/generated/error.dart ('k') | pkg/analyzer/test/src/task/options_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698