OLD | NEW |
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 'dart:collection'; | 7 import 'dart:collection'; |
8 | 8 |
9 import 'package:analyzer/analyzer.dart'; | 9 import 'package:analyzer/analyzer.dart'; |
10 import 'package:analyzer/plugin/options.dart'; | 10 import 'package:analyzer/plugin/options.dart'; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 static const String enableStrictCallChecks = 'enableStrictCallChecks'; | 48 static const String enableStrictCallChecks = 'enableStrictCallChecks'; |
49 static const String enableSuperMixins = 'enableSuperMixins'; | 49 static const String enableSuperMixins = 'enableSuperMixins'; |
50 static const String enableTrailingCommas = 'enableTrailingCommas'; | 50 static const String enableTrailingCommas = 'enableTrailingCommas'; |
51 | 51 |
52 static const String errors = 'errors'; | 52 static const String errors = 'errors'; |
53 static const String exclude = 'exclude'; | 53 static const String exclude = 'exclude'; |
54 static const String language = 'language'; | 54 static const String language = 'language'; |
55 static const String plugins = 'plugins'; | 55 static const String plugins = 'plugins'; |
56 static const String strong_mode = 'strong-mode'; | 56 static const String strong_mode = 'strong-mode'; |
57 | 57 |
| 58 // Strong mode options, see AnalysisOptionsImpl for documentation. |
| 59 static const String implicitCasts = 'implicit-casts'; |
| 60 static const String implicitDynamic = 'implicit-dynamic'; |
| 61 |
58 /// Ways to say `ignore`. | 62 /// Ways to say `ignore`. |
59 static const List<String> ignoreSynonyms = const ['ignore', 'false']; | 63 static const List<String> ignoreSynonyms = const ['ignore', 'false']; |
60 | 64 |
61 /// Valid error `severity`s. | 65 /// Valid error `severity`s. |
62 static final List<String> severities = | 66 static final List<String> severities = |
63 new List.unmodifiable(severityMap.keys); | 67 new List.unmodifiable(severityMap.keys); |
64 | 68 |
65 /// Ways to say `include`. | 69 /// Ways to say `include`. |
66 static const List<String> includeSynonyms = const ['include', 'true']; | 70 static const List<String> includeSynonyms = const ['include', 'true']; |
67 | 71 |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
421 */ | 425 */ |
422 void applyToAnalysisOptions( | 426 void applyToAnalysisOptions( |
423 AnalysisOptionsImpl options, Map<String, Object> optionMap) { | 427 AnalysisOptionsImpl options, Map<String, Object> optionMap) { |
424 if (optionMap == null) { | 428 if (optionMap == null) { |
425 return; | 429 return; |
426 } | 430 } |
427 var analyzer = optionMap[AnalyzerOptions.analyzer]; | 431 var analyzer = optionMap[AnalyzerOptions.analyzer]; |
428 if (analyzer is Map) { | 432 if (analyzer is Map) { |
429 // Process strong mode option. | 433 // Process strong mode option. |
430 var strongMode = analyzer[AnalyzerOptions.strong_mode]; | 434 var strongMode = analyzer[AnalyzerOptions.strong_mode]; |
431 if (strongMode is bool) { | 435 _applyStrongOptions(options, strongMode); |
432 options.strongMode = strongMode; | 436 |
433 } | |
434 // Process language options. | 437 // Process language options. |
435 var language = analyzer[AnalyzerOptions.language]; | 438 var language = analyzer[AnalyzerOptions.language]; |
436 _applyLanguageOptions(options, language); | 439 _applyLanguageOptions(options, language); |
437 } | 440 } |
438 } | 441 } |
439 | 442 |
440 /// Configure [context] based on the given [options] (which can be `null` | 443 /// Configure [context] based on the given [options] (which can be `null` |
441 /// to restore [defaults]). | 444 /// to restore [defaults]). |
442 void configure(AnalysisContext context, Map<String, Object> options) { | 445 void configure(AnalysisContext context, Map<String, Object> options) { |
443 if (options == null) { | 446 if (options == null) { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
517 } | 520 } |
518 } | 521 } |
519 | 522 |
520 void setProcessors(AnalysisContext context, Object codes) { | 523 void setProcessors(AnalysisContext context, Object codes) { |
521 ErrorConfig config = new ErrorConfig(codes); | 524 ErrorConfig config = new ErrorConfig(codes); |
522 context.setConfigurationData( | 525 context.setConfigurationData( |
523 CONFIGURED_ERROR_PROCESSORS, config.processors); | 526 CONFIGURED_ERROR_PROCESSORS, config.processors); |
524 } | 527 } |
525 | 528 |
526 void setStrongMode(AnalysisContext context, Object strongMode) { | 529 void setStrongMode(AnalysisContext context, Object strongMode) { |
527 bool strong = strongMode is bool ? strongMode : false; | 530 if (strongMode is Map) { |
528 if (context.analysisOptions.strongMode != strong) { | |
529 AnalysisOptionsImpl options = | 531 AnalysisOptionsImpl options = |
530 new AnalysisOptionsImpl.from(context.analysisOptions); | 532 new AnalysisOptionsImpl.from(context.analysisOptions); |
531 options.strongMode = strong; | 533 _applyStrongOptions(options, strongMode); |
532 context.analysisOptions = options; | 534 context.analysisOptions = options; |
| 535 } else { |
| 536 strongMode = strongMode is bool ? strongMode : false; |
| 537 if (context.analysisOptions.strongMode != strongMode) { |
| 538 AnalysisOptionsImpl options = |
| 539 new AnalysisOptionsImpl.from(context.analysisOptions); |
| 540 options.strongMode = strongMode; |
| 541 context.analysisOptions = options; |
| 542 } |
533 } | 543 } |
534 } | 544 } |
535 | 545 |
536 void _applyLanguageOption( | 546 void _applyLanguageOption( |
537 AnalysisOptionsImpl options, Object feature, Object value) { | 547 AnalysisOptionsImpl options, Object feature, Object value) { |
538 bool boolValue = toBool(value); | 548 bool boolValue = toBool(value); |
539 if (boolValue != null) { | 549 if (boolValue != null) { |
540 if (feature == AnalyzerOptions.enableAsync) { | 550 if (feature == AnalyzerOptions.enableAsync) { |
541 options.enableAsync = boolValue; | 551 options.enableAsync = boolValue; |
542 } | 552 } |
(...skipping 12 matching lines...) Expand all Loading... |
555 if (key is YamlScalar && value is YamlScalar) { | 565 if (key is YamlScalar && value is YamlScalar) { |
556 String feature = key.value?.toString(); | 566 String feature = key.value?.toString(); |
557 _applyLanguageOption(options, feature, value.value); | 567 _applyLanguageOption(options, feature, value.value); |
558 } | 568 } |
559 }); | 569 }); |
560 } else if (configs is Map) { | 570 } else if (configs is Map) { |
561 configs | 571 configs |
562 .forEach((key, value) => _applyLanguageOption(options, key, value)); | 572 .forEach((key, value) => _applyLanguageOption(options, key, value)); |
563 } | 573 } |
564 } | 574 } |
| 575 |
| 576 void _applyStrongOptions(AnalysisOptionsImpl options, Object config) { |
| 577 if (config is YamlMap) { |
| 578 options.strongMode = true; |
| 579 config.nodes.forEach((k, v) { |
| 580 if (k is YamlScalar && v is YamlScalar) { |
| 581 _applyStrongModeOption(options, k.value?.toString(), v.value); |
| 582 } |
| 583 }); |
| 584 } else if (config is Map) { |
| 585 options.strongMode = true; |
| 586 config.forEach((k, v) => _applyStrongModeOption(options, k, v)); |
| 587 } else { |
| 588 options.strongMode = config is bool ? config : false; |
| 589 } |
| 590 } |
| 591 |
| 592 void _applyStrongModeOption( |
| 593 AnalysisOptionsImpl options, Object feature, Object value) { |
| 594 bool boolValue = toBool(value); |
| 595 if (boolValue != null) { |
| 596 if (feature == AnalyzerOptions.implicitCasts) { |
| 597 options.implicitCasts = boolValue; |
| 598 } |
| 599 if (feature == AnalyzerOptions.implicitDynamic) { |
| 600 options.implicitDynamic = boolValue; |
| 601 } |
| 602 } |
| 603 } |
565 } | 604 } |
OLD | NEW |