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

Side by Side Diff: pkg/analyzer/lib/src/task/options.dart

Issue 1441323003: Strong Mode option value validation. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « no previous file | pkg/analyzer/test/src/task/options_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 library analyzer.src.task.options; 5 library analyzer.src.task.options;
6 6
7 import 'package:analyzer/analyzer.dart'; 7 import 'package:analyzer/analyzer.dart';
8 import 'package:analyzer/plugin/options.dart'; 8 import 'package:analyzer/plugin/options.dart';
9 import 'package:analyzer/source/analysis_options_provider.dart'; 9 import 'package:analyzer/source/analysis_options_provider.dart';
10 import 'package:analyzer/src/generated/engine.dart'; 10 import 'package:analyzer/src/generated/engine.dart';
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 enableGenericMethods, 66 enableGenericMethods,
67 enableSuperMixins 67 enableSuperMixins
68 ]; 68 ];
69 } 69 }
70 70
71 /// Validates `analyzer` options. 71 /// Validates `analyzer` options.
72 class AnalyzerOptionsValidator extends CompositeValidator { 72 class AnalyzerOptionsValidator extends CompositeValidator {
73 AnalyzerOptionsValidator() 73 AnalyzerOptionsValidator()
74 : super([ 74 : super([
75 new TopLevelAnalyzerOptionsValidator(), 75 new TopLevelAnalyzerOptionsValidator(),
76 new StrongModeOptionValueValidator(),
76 new ErrorFilterOptionValidator(), 77 new ErrorFilterOptionValidator(),
77 new LanguageOptionValidator() 78 new LanguageOptionValidator()
78 ]); 79 ]);
79 } 80 }
80 81
81 /// Convenience class for composing validators. 82 /// Convenience class for composing validators.
82 class CompositeValidator extends OptionsValidator { 83 class CompositeValidator extends OptionsValidator {
83 final List<OptionsValidator> validators; 84 final List<OptionsValidator> validators;
84 CompositeValidator(this.validators); 85 CompositeValidator(this.validators);
85 86
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 List<int> lineStarts = StringUtilities.computeLineStarts(content); 220 List<int> lineStarts = StringUtilities.computeLineStarts(content);
220 return new LineInfo(lineStarts); 221 return new LineInfo(lineStarts);
221 } 222 }
222 223
223 /// Create a task based on the given [target] in the given [context]. 224 /// Create a task based on the given [target] in the given [context].
224 static GenerateOptionsErrorsTask createTask( 225 static GenerateOptionsErrorsTask createTask(
225 AnalysisContext context, AnalysisTarget target) => 226 AnalysisContext context, AnalysisTarget target) =>
226 new GenerateOptionsErrorsTask(context, target); 227 new GenerateOptionsErrorsTask(context, target);
227 } 228 }
228 229
230 /// Validates `analyzer` strong-mode value configuration options.
231 class StrongModeOptionValueValidator extends OptionsValidator {
232 ErrorBuilder trueOrFalseBuilder = new TrueOrFalseValueErrorBuilder();
233
234 @override
235 void validate(ErrorReporter reporter, Map<String, YamlNode> options) {
236 var analyzer = options[AnalyzerOptions.analyzer];
237 if (analyzer is! YamlMap) {
238 return;
239 }
240
241 var v = analyzer.nodes[AnalyzerOptions.strong_mode];
242 if (v is YamlScalar) {
243 var value = toLowerCase(v.value);
244 if (!AnalyzerOptions.trueOrFalse.contains(value)) {
245 trueOrFalseBuilder.reportError(
246 reporter, AnalyzerOptions.strong_mode, v);
247 }
248 }
249 }
250 }
251
229 /// Validates `analyzer` language configuration options. 252 /// Validates `analyzer` language configuration options.
230 class LanguageOptionValidator extends OptionsValidator { 253 class LanguageOptionValidator extends OptionsValidator {
231 ErrorBuilder builder = new ErrorBuilder(AnalyzerOptions.languageOptions); 254 ErrorBuilder builder = new ErrorBuilder(AnalyzerOptions.languageOptions);
232 ErrorBuilder trueOrFalseBuilder = new TrueOrFalseValueErrorBuilder(); 255 ErrorBuilder trueOrFalseBuilder = new TrueOrFalseValueErrorBuilder();
233 256
234 @override 257 @override
235 void validate(ErrorReporter reporter, Map<String, YamlNode> options) { 258 void validate(ErrorReporter reporter, Map<String, YamlNode> options) {
236 var analyzer = options[AnalyzerOptions.analyzer]; 259 var analyzer = options[AnalyzerOptions.analyzer];
237 if (analyzer is! YamlMap) { 260 if (analyzer is! YamlMap) {
238 return; 261 return;
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 411
389 void setLanguageOptions(AnalysisContext context, Object configs) { 412 void setLanguageOptions(AnalysisContext context, Object configs) {
390 if (configs is YamlMap) { 413 if (configs is YamlMap) {
391 configs.nodes.forEach((k, v) { 414 configs.nodes.forEach((k, v) {
392 String feature; 415 String feature;
393 if (k is YamlScalar && v is YamlScalar) { 416 if (k is YamlScalar && v is YamlScalar) {
394 feature = k.value?.toString(); 417 feature = k.value?.toString();
395 if (feature == AnalyzerOptions.enableSuperMixins) { 418 if (feature == AnalyzerOptions.enableSuperMixins) {
396 if (isTrue(v.value)) { 419 if (isTrue(v.value)) {
397 AnalysisOptionsImpl options = 420 AnalysisOptionsImpl options =
398 new AnalysisOptionsImpl.from(context.analysisOptions); 421 new AnalysisOptionsImpl.from(context.analysisOptions);
399 options.enableSuperMixins = true; 422 options.enableSuperMixins = true;
400 context.analysisOptions = options; 423 context.analysisOptions = options;
401 } 424 }
402 } 425 }
403 if (feature == AnalyzerOptions.enableGenericMethods) { 426 if (feature == AnalyzerOptions.enableGenericMethods) {
404 if (isTrue(v.value)) { 427 if (isTrue(v.value)) {
405 AnalysisOptionsImpl options = 428 AnalysisOptionsImpl options =
406 new AnalysisOptionsImpl.from(context.analysisOptions); 429 new AnalysisOptionsImpl.from(context.analysisOptions);
407 options.enableGenericMethods = true; 430 options.enableGenericMethods = true;
408 context.analysisOptions = options; 431 context.analysisOptions = options;
409 } 432 }
410 } 433 }
411 } 434 }
412 }); 435 });
413 } 436 }
414 } 437 }
415 438
416 void setStrongMode(AnalysisContext context, Object strongMode) { 439 void setStrongMode(AnalysisContext context, Object strongMode) {
417 bool strong = strongMode is bool ? strongMode : false; 440 bool strong = strongMode is bool ? strongMode : false;
418 if (context.analysisOptions.strongMode != strong) { 441 if (context.analysisOptions.strongMode != strong) {
419 AnalysisOptionsImpl options = 442 AnalysisOptionsImpl options =
420 new AnalysisOptionsImpl.from(context.analysisOptions); 443 new AnalysisOptionsImpl.from(context.analysisOptions);
421 options.strongMode = strong; 444 options.strongMode = strong;
422 context.analysisOptions = options; 445 context.analysisOptions = options;
423 } 446 }
424 } 447 }
425 } 448 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/test/src/task/options_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698