Version 2.17.0-246.0.dev
Merge commit '5050f31b29950b527e580f5fe2e26ac85fd2bad2' into 'dev'
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index a9b52c3..4f359ad 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -40,16 +40,6 @@
50,
"Remove '{0}'",
);
- static const REPLACE_WITH_STRICT_CASTS = FixKind(
- 'analysisOptions.fix.replaceWithStrictCasts',
- 50,
- 'Replace with the strict-casts analysis mode',
- );
- static const REPLACE_WITH_STRICT_RAW_TYPES = FixKind(
- 'analysisOptions.fix.replaceWithStrictRawTypes',
- 50,
- 'Replace with the strict-raw-types analysis mode',
- );
}
/// The implementation of [DartFixContext].
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart b/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart
index 5e36f57..8c148db 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart
@@ -16,12 +16,9 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/lint/options_rule_validator.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
-import 'package:analyzer_plugin/utilities/change_builder/change_builder_yaml.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
-import 'package:collection/collection.dart';
import 'package:yaml/yaml.dart';
-import 'package:yaml_edit/yaml_edit.dart';
/// The generator used to generate fixes in analysis options files.
class AnalysisOptionsFixGenerator {
@@ -70,26 +67,7 @@
// AnalysisOptionsHintCode.STRONG_MODE_SETTING_DEPRECATED) {
// } else
- if (errorCode ==
- AnalysisOptionsWarningCode
- .ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT) {
- var analyzerMap = options['analyzer'];
- if (analyzerMap is! YamlMap) {
- return fixes;
- }
- var strongModeMap = analyzerMap['strong-mode'];
-
- if (strongModeMap is! YamlMap) {
- return fixes;
- }
- if (_isErrorAtMapKey(strongModeMap, 'implicit-casts')) {
- await _addFix_replaceWithStrictCasts(
- coveringNodePath, analyzerMap, strongModeMap);
- } else if (_isErrorAtMapKey(strongModeMap, 'implicit-dynamic')) {
- await _addFix_replaceWithStrictRawTypes(
- coveringNodePath, analyzerMap, strongModeMap);
- }
- } else if (errorCode == DEPRECATED_LINT_HINT) {
+ if (errorCode == DEPRECATED_LINT_HINT) {
await _addFix_removeLint(coveringNodePath);
} else if (errorCode ==
AnalysisOptionsHintCode.SUPER_MIXINS_SETTING_DEPRECATED) {
@@ -131,52 +109,6 @@
}
}
- /// Replaces `analyzer: strong-mode: implicit-casts: false` with
- /// `analyzer: language: strict-casts: true`.
- Future<void> _addFix_replaceWithStrictCasts(List<YamlNode> coveringNodePath,
- YamlMap analyzerMap, YamlMap strongModeMap) async {
- var builder =
- ChangeBuilder(workspace: _NonDartChangeWorkspace(resourceProvider));
- await builder.addYamlFileEdit(file, (builder) {
- _replaceStrongModeEntryWithLanguageEntry(
- builder,
- coveringNodePath,
- analyzerMap,
- strongModeMap,
- strongModeKey: 'implicit-casts',
- languageKey: 'strict-casts',
- languageValue: true,
- );
- });
- _addFixFromBuilder(
- builder, AnalysisOptionsFixKind.REPLACE_WITH_STRICT_CASTS,
- args: [coveringNodePath[0].toString()]);
- }
-
- /// Replaces `analyzer: strong-mode: implicit-dynamic: false` with
- /// `analyzer: language: strict-raw-types: true`.
- Future<void> _addFix_replaceWithStrictRawTypes(
- List<YamlNode> coveringNodePath,
- YamlMap analyzerMap,
- YamlMap strongModeMap) async {
- var builder =
- ChangeBuilder(workspace: _NonDartChangeWorkspace(resourceProvider));
- await builder.addYamlFileEdit(file, (builder) {
- _replaceStrongModeEntryWithLanguageEntry(
- builder,
- coveringNodePath,
- analyzerMap,
- strongModeMap,
- strongModeKey: 'implicit-dynamic',
- languageKey: 'strict-raw-types',
- languageValue: true,
- );
- });
- _addFixFromBuilder(
- builder, AnalysisOptionsFixKind.REPLACE_WITH_STRICT_RAW_TYPES,
- args: [coveringNodePath[0].toString()]);
- }
-
/// Add a fix whose edits were built by the [builder] that has the given
/// [kind]. If [args] are provided, they will be used to fill in the message
/// for the fix.
@@ -259,20 +191,6 @@
return offset;
}
- /// Returns whether the error is located within [map], covering the
- /// [YamlScalar] node for [key].
- bool _isErrorAtMapKey(YamlMap map, String key) {
- var keyNode = map.nodes.keys
- .whereType<YamlScalar>()
- .firstWhereOrNull((k) => k.value == key);
- if (keyNode == null) {
- return false;
- }
- var keyOffset = keyNode.span.start.offset;
- var keyLength = keyNode.span.end.offset - keyOffset;
- return keyOffset == errorOffset && keyLength == errorLength;
- }
-
SourceRange _lines(int start, int end) {
var startLocation = lineInfo.getLocation(start);
var startOffset = lineInfo.getOffsetOfLine(startLocation.lineNumber - 1);
@@ -281,53 +199,6 @@
math.min(endLocation.lineNumber, lineInfo.lineCount - 1));
return SourceRange(startOffset, endOffset - startOffset);
}
-
- /// Replaces a 'strong-mode' entry keyed to [strongModeKey] with a 'language'
- /// entry with [languageKey] and [languageValue].
- ///
- /// 'strong-mode' and 'language' are each maps which can be found under the
- /// top-level 'analyzer' map. 'strong-mode' (given as [strongModeMap]) must
- /// already be present under the 'analyzer' map (given as [analyzerMap]).
- void _replaceStrongModeEntryWithLanguageEntry(
- YamlFileEditBuilder builder,
- List<YamlNode> coveringNodePath,
- YamlMap analyzerMap,
- YamlMap strongModeMap, {
- required String strongModeKey,
- required String languageKey,
- required Object? languageValue,
- }) {
- var yamlEditor = YamlEditor(content);
- // If 'language' does not exist yet under 'analyzer', create it.
- if (analyzerMap['language'] == null) {
- yamlEditor.update(['analyzer', 'language'], {languageKey: languageValue});
- } else {
- yamlEditor.update(['analyzer', 'language', languageKey], languageValue);
- }
- var languageEdit = yamlEditor.edits.single;
- builder.addSimpleReplacement(
- SourceRange(languageEdit.offset, languageEdit.length),
- languageEdit.replacement);
-
- // If `strongModeKey` is the only entry under 'strong-mode', then remove
- // the entire 'strong-mode' entry.
- if (strongModeMap.length == 1) {
- yamlEditor.remove(['analyzer', 'strong-mode']);
- } else {
- yamlEditor.remove(['analyzer', 'strong-mode', strongModeKey]);
- }
- var strongModeEdit = yamlEditor.edits[1];
- int strongModeEditOffset;
- if (strongModeEdit.offset > languageEdit.offset) {
- strongModeEditOffset = strongModeEdit.offset -
- (languageEdit.replacement.length - languageEdit.length);
- } else {
- strongModeEditOffset = strongModeEdit.offset;
- }
- builder.addSimpleReplacement(
- SourceRange(strongModeEditOffset, strongModeEdit.length),
- strongModeEdit.replacement);
- }
}
class _NonDartChangeWorkspace implements ChangeWorkspace {
diff --git a/pkg/analysis_server/pubspec.yaml b/pkg/analysis_server/pubspec.yaml
index 98487cb..5f62d61 100644
--- a/pkg/analysis_server/pubspec.yaml
+++ b/pkg/analysis_server/pubspec.yaml
@@ -29,7 +29,6 @@
path: any
watcher: any
yaml: any
- yaml_edit: any
dev_dependencies:
analyzer_utilities:
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 3d99a77..ab5be7e 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -66,10 +66,6 @@
Future<AnalysisSession> get session => sessionFor(testPackageRootPath);
- /// The path for `analysis_options.yaml` in [testPackageRootPath].
- String get testAnalysisOptionsPath =>
- convertPath('$testPackageRootPath/analysis_options.yaml');
-
String? get testPackageLanguageVersion => latestLanguageVersion;
String get testPackageLibPath => '$testPackageRootPath/lib';
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index f4d93622..816c714 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -43,6 +43,8 @@
/// TODO(scheglov) this is duplicate
class AnalysisOptionsFileConfig {
final List<String> experiments;
+ final bool implicitCasts;
+ final bool implicitDynamic;
final List<String> lints;
final bool strictCasts;
final bool strictInference;
@@ -50,6 +52,8 @@
AnalysisOptionsFileConfig({
this.experiments = const [],
+ this.implicitCasts = true,
+ this.implicitDynamic = true,
this.lints = const [],
this.strictCasts = false,
this.strictInference = false,
@@ -68,6 +72,9 @@
buffer.writeln(' strict-casts: $strictCasts');
buffer.writeln(' strict-inference: $strictInference');
buffer.writeln(' strict-raw-types: $strictRawTypes');
+ buffer.writeln(' strong-mode:');
+ buffer.writeln(' implicit-casts: $implicitCasts');
+ buffer.writeln(' implicit-dynamic: $implicitDynamic');
buffer.writeln('linter:');
buffer.writeln(' rules:');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/replace_with_strict_casts_test.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/replace_with_strict_casts_test.dart
deleted file mode 100644
index c8be60d..0000000
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/replace_with_strict_casts_test.dart
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright (c) 2022, 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 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'test_support.dart';
-
-void main() {
- defineReflectiveSuite(() {
- defineReflectiveTests(ReplaceWithStrictCastsTest);
- });
-}
-
-@reflectiveTest
-class ReplaceWithStrictCastsTest extends AnalysisOptionsFixTest {
- Future<void> test_hasLanguage() async {
- await assertHasFix('''
-analyzer:
- language:
- strict-inference: true
- strong-mode:
- implicit-casts: false
-''', '''
-analyzer:
- language:
- strict-casts: true
- strict-inference: true
-''');
- }
-
- Future<void> test_hasLanguage_isAfter() async {
- await assertHasFix('''
-analyzer:
- strong-mode:
- implicit-casts: false
- language:
- strict-inference: true
-''', '''
-analyzer:
- language:
- strict-casts: true
- strict-inference: true
-''');
- }
-
- Future<void> test_hasStrictCastsFalse() async {
- await assertHasFix('''
-analyzer:
- language:
- strict-casts: false
- strong-mode:
- implicit-casts: false
-''', '''
-analyzer:
- language:
- strict-casts: true
-''');
- }
-
- Future<void> test_hasStrictCastsTrue() async {
- await assertHasFix('''
-analyzer:
- language:
- strict-casts: true
- strong-mode:
- implicit-casts: false
-''', '''
-analyzer:
- language:
- strict-casts: true
-''');
- }
-
- Future<void> test_noLanguage() async {
- await assertHasFix('''
-analyzer:
- strong-mode:
- implicit-casts: false
-''', '''
-analyzer:
- language:
- strict-casts: true
-''');
- }
-
- Future<void> test_noLanguage_analyzerHasOtherEntries() async {
- await assertHasFix('''
-analyzer:
- errors:
- unused_import: ignore
- strong-mode:
- implicit-casts: false
-''', '''
-analyzer:
- errors:
- unused_import: ignore
- language:
- strict-casts: true
-''');
- }
-
- Future<void> test_noLanguage_analyzerHasOtherEntriesAfter() async {
- await assertHasFix('''
-analyzer:
- strong-mode:
- implicit-casts: false
- errors:
- unused_import: ignore
-''', '''
-analyzer:
- errors:
- unused_import: ignore
- language:
- strict-casts: true
-''');
- }
-
- Future<void> test_noLanguage_hasOtherStrongModeEntry() async {
- await assertHasFix('''
-analyzer:
- strong-mode:
- implicit-casts: false
- implicit-dynamic: false
-''', '''
-analyzer:
- language:
- strict-casts: true
- strong-mode:
- implicit-dynamic: false
-''', errorFilter: (error) => error.message.contains('implicit-casts'));
- }
-
- Future<void> test_noLanguage_implicitCastsHasComment() async {
- await assertHasFix('''
-analyzer:
- strong-mode:
- # No implicit casts
- implicit-casts: false
-''', '''
-analyzer:
- language:
- strict-casts: true
-''');
- }
-
- Future<void> test_noLanguage_strongModeHasComment() async {
- // TODO(srawlins): This is unfortunate; it would be better to remove the
- // comment. But we leave this assertion as is to show at least the file is
- // not corrupted.
- await assertHasFix('''
-analyzer:
- # Strong mode
- strong-mode:
- implicit-casts: false
-''', '''
-analyzer:
- # Strong mode
- language:
- strict-casts: true
-''');
- }
-}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/replace_with_strict_raw_types_test.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/replace_with_strict_raw_types_test.dart
deleted file mode 100644
index eb8012d..0000000
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/replace_with_strict_raw_types_test.dart
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright (c) 2022, 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 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'test_support.dart';
-
-void main() {
- defineReflectiveSuite(() {
- defineReflectiveTests(ReplaceWithStrictRawTypesTest);
- });
-}
-
-@reflectiveTest
-class ReplaceWithStrictRawTypesTest extends AnalysisOptionsFixTest {
- Future<void> test_hasLanguage() async {
- await assertHasFix('''
-analyzer:
- language:
- strict-inference: true
- strong-mode:
- implicit-dynamic: false
-''', '''
-analyzer:
- language:
- strict-inference: true
- strict-raw-types: true
-''');
- }
-
- Future<void> test_hasLanguage_isAfter() async {
- await assertHasFix('''
-analyzer:
- strong-mode:
- implicit-dynamic: false
- language:
- strict-inference: true
-''', '''
-analyzer:
- language:
- strict-inference: true
- strict-raw-types: true
-''');
- }
-
- Future<void> test_hasStrictRawTypesFalse() async {
- await assertHasFix('''
-analyzer:
- language:
- strict-raw-types: false
- strong-mode:
- implicit-dynamic: false
-''', '''
-analyzer:
- language:
- strict-raw-types: true
-''');
- }
-
- Future<void> test_hasStrictRawTypesTrue() async {
- await assertHasFix('''
-analyzer:
- language:
- strict-raw-types: true
- strong-mode:
- implicit-dynamic: false
-''', '''
-analyzer:
- language:
- strict-raw-types: true
-''');
- }
-
- Future<void> test_noLanguage() async {
- await assertHasFix('''
-analyzer:
- strong-mode:
- implicit-dynamic: false
-''', '''
-analyzer:
- language:
- strict-raw-types: true
-''');
- }
-
- Future<void> test_noLanguage_analyzerHasOtherEntries() async {
- await assertHasFix('''
-analyzer:
- errors:
- unused_import: ignore
- strong-mode:
- implicit-dynamic: false
-''', '''
-analyzer:
- errors:
- unused_import: ignore
- language:
- strict-raw-types: true
-''');
- }
-
- Future<void> test_noLanguage_analyzerHasOtherEntriesAfter() async {
- await assertHasFix('''
-analyzer:
- strong-mode:
- implicit-dynamic: false
- errors:
- unused_import: ignore
-''', '''
-analyzer:
- errors:
- unused_import: ignore
- language:
- strict-raw-types: true
-''');
- }
-
- Future<void> test_noLanguage_hasOtherStrongModeEntry() async {
- await assertHasFix('''
-analyzer:
- strong-mode:
- implicit-casts: false
- implicit-dynamic: false
-''', '''
-analyzer:
- language:
- strict-raw-types: true
- strong-mode:
- implicit-casts: false
-''', errorFilter: (error) => error.message.contains('implicit-dynamic'));
- }
-
- Future<void> test_noLanguage_implicitDynamicHasComment() async {
- await assertHasFix('''
-analyzer:
- strong-mode:
- # No implicit dynamic
- implicit-dynamic: false
-''', '''
-analyzer:
- language:
- strict-raw-types: true
-''');
- }
-
- Future<void> test_noLanguage_strongModeHasComment() async {
- // TODO(srawlins): This is unfortunate; it would be better to remove the
- // comment. But we leave this assertion as is to show at least the file is
- // not corrupted.
- await assertHasFix('''
-analyzer:
- # Strong mode
- strong-mode:
- implicit-dynamic: false
-''', '''
-analyzer:
- # Strong mode
- language:
- strict-raw-types: true
-''');
- }
-}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_all.dart
index c4d940e..6d61c19 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_all.dart
@@ -6,15 +6,10 @@
import 'remove_lint_test.dart' as remove_lint;
import 'remove_setting_test.dart' as remove_setting;
-import 'replace_with_strict_casts_test.dart' as replace_with_strict_casts;
-import 'replace_with_strict_raw_types_test.dart'
- as replace_with_strict_raw_types;
void main() {
defineReflectiveSuite(() {
remove_lint.main();
remove_setting.main();
- replace_with_strict_casts.main();
- replace_with_strict_raw_types.main();
});
}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart
index d5cc2c4..058fc31 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/test_support.dart
@@ -3,13 +3,12 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:analysis_server/plugin/edit/fix/fix_core.dart';
+import 'package:analysis_server/src/protocol_server.dart' show SourceEdit;
import 'package:analysis_server/src/services/correction/fix/analysis_options/fix_generator.dart';
-import 'package:analyzer/error/error.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/task/options.dart';
import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
-import 'package:analyzer_plugin/protocol/protocol_common.dart'
- hide AnalysisError;
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
import 'package:test/test.dart';
import 'package:yaml/yaml.dart';
@@ -17,11 +16,8 @@
/// errors in Dart files.
class AnalysisOptionsFixTest with ResourceProviderMixin {
Future<void> assertHasFix(
- String initialContent,
- String expectedContent, {
- bool Function(AnalysisError)? errorFilter,
- }) async {
- var fixes = await _getFixes(initialContent, errorFilter: errorFilter);
+ String initialContent, String expectedContent) async {
+ var fixes = await _getFixes(initialContent);
expect(fixes, hasLength(1));
var fileEdits = fixes[0].change.edits;
expect(fileEdits, hasLength(1));
@@ -36,11 +32,8 @@
expect(fixes, hasLength(0));
}
- Future<List<Fix>> _getFixes(
- String content, {
- bool Function(AnalysisError)? errorFilter,
- }) {
- var optionsFile = newFile2('/analysis_options.yaml', content);
+ Future<List<Fix>> _getFixes(String content) {
+ var optionsFile = getFile('/analysis_options.yaml');
var sourceFactory = SourceFactory([]);
var errors = analyzeAnalysisOptions(
optionsFile.createSource(),
@@ -48,12 +41,6 @@
sourceFactory,
'/',
);
- if (errorFilter != null) {
- if (errors.length == 1) {
- fail('Unnecessary error filter');
- }
- errors = errors.where(errorFilter).toList();
- }
expect(errors, hasLength(1));
var error = errors[0];
var options = _parseYaml(content);
diff --git a/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart b/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
index 962d243..cbe95e2 100644
--- a/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
+++ b/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
@@ -135,17 +135,6 @@
);
/**
- * An error code indicating that the given option is deprecated.
- */
- static const AnalysisOptionsWarningCode
- ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT = AnalysisOptionsWarningCode(
- 'ANALYSIS_OPTION_DEPRECATED',
- "The option '{0}' is no longer supported.",
- correctionMessage: "Try using the new '{1}' option.",
- uniqueName: 'ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT',
- );
-
- /**
* An error code indicating a specified include file has a warning.
*
* Parameters:
diff --git a/pkg/analyzer/lib/src/task/options.dart b/pkg/analyzer/lib/src/task/options.dart
index 3c67e40..ea2f3f4 100644
--- a/pkg/analyzer/lib/src/task/options.dart
+++ b/pkg/analyzer/lib/src/task/options.dart
@@ -635,48 +635,43 @@
void validate(ErrorReporter reporter, YamlMap options) {
var analyzer = options.valueAt(AnalyzerOptions.analyzer);
if (analyzer is YamlMap) {
- var strongModeNode = analyzer.valueAt(AnalyzerOptions.strong_mode);
- if (strongModeNode is YamlScalar) {
- return _validateStrongModeAsScalar(reporter, strongModeNode);
- } else if (strongModeNode is YamlMap) {
- return _validateStrongModeAsMap(reporter, strongModeNode);
- } else if (strongModeNode != null) {
- reporter.reportErrorForSpan(
- AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT,
- strongModeNode.span,
- [AnalyzerOptions.enableExperiment]);
- }
- }
- }
-
- void _validateStrongModeAsMap(
- ErrorReporter reporter, YamlMap strongModeNode) {
- strongModeNode.nodes.forEach((k, v) {
- if (k is YamlScalar) {
- var key = k.value?.toString();
- if (!AnalyzerOptions.strongModeOptions.contains(key)) {
- _builder.reportError(reporter, AnalyzerOptions.strong_mode, k);
- } else if (key == AnalyzerOptions.declarationCasts) {
+ var v = analyzer.valueAt(AnalyzerOptions.strong_mode);
+ if (v is YamlScalar) {
+ var value = toLowerCase(v.value);
+ if (!AnalyzerOptions.trueOrFalse.contains(value)) {
reporter.reportErrorForSpan(
- AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED,
- k.span,
- [AnalyzerOptions.declarationCasts]);
- } else if (key == AnalyzerOptions.implicitCasts) {
+ AnalysisOptionsWarningCode.UNSUPPORTED_VALUE, v.span, [
+ AnalyzerOptions.strong_mode,
+ v.value,
+ AnalyzerOptions.trueOrFalseProposal
+ ]);
+ } else if (value == 'false') {
reporter.reportErrorForSpan(
- AnalysisOptionsWarningCode
- .ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT,
- k.span,
- [AnalyzerOptions.implicitCasts, 'strict-casts']);
- } else if (key == AnalyzerOptions.implicitDynamic) {
+ AnalysisOptionsWarningCode.SPEC_MODE_REMOVED, v.span);
+ } else if (value == 'true') {
reporter.reportErrorForSpan(
- AnalysisOptionsWarningCode
- .ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT,
- k.span,
- [AnalyzerOptions.implicitDynamic, 'strict-raw-types']);
- } else {
- // The key is valid.
- if (v is YamlScalar) {
- var value = toLowerCase(v.value);
+ AnalysisOptionsHintCode.STRONG_MODE_SETTING_DEPRECATED, v.span);
+ }
+ } else if (v is YamlMap) {
+ v.nodes.forEach((k, v) {
+ String? key, value;
+ bool validKey = false;
+ if (k is YamlScalar) {
+ key = k.value?.toString();
+ if (!AnalyzerOptions.strongModeOptions.contains(key)) {
+ _builder.reportError(reporter, AnalyzerOptions.strong_mode, k);
+ } else if (key == AnalyzerOptions.declarationCasts) {
+ reporter.reportErrorForSpan(
+ AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED,
+ k.span,
+ [AnalyzerOptions.declarationCasts]);
+ } else {
+ // If we have a valid key, go on and check the value.
+ validKey = true;
+ }
+ }
+ if (validKey && v is YamlScalar) {
+ value = toLowerCase(v.value);
if (!AnalyzerOptions.trueOrFalse.contains(value)) {
reporter.reportErrorForSpan(
AnalysisOptionsWarningCode.UNSUPPORTED_VALUE,
@@ -684,28 +679,13 @@
[key!, v.value, AnalyzerOptions.trueOrFalseProposal]);
}
}
- }
+ });
+ } else if (v != null) {
+ reporter.reportErrorForSpan(
+ AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT,
+ v.span,
+ [AnalyzerOptions.enableExperiment]);
}
- });
- }
-
- void _validateStrongModeAsScalar(
- ErrorReporter reporter, YamlScalar strongModeNode) {
- var stringValue = toLowerCase(strongModeNode.value);
- if (!AnalyzerOptions.trueOrFalse.contains(stringValue)) {
- reporter.reportErrorForSpan(
- AnalysisOptionsWarningCode.UNSUPPORTED_VALUE, strongModeNode.span, [
- AnalyzerOptions.strong_mode,
- strongModeNode.value,
- AnalyzerOptions.trueOrFalseProposal
- ]);
- } else if (stringValue == 'false') {
- reporter.reportErrorForSpan(
- AnalysisOptionsWarningCode.SPEC_MODE_REMOVED, strongModeNode.span);
- } else if (stringValue == 'true') {
- reporter.reportErrorForSpan(
- AnalysisOptionsHintCode.STRONG_MODE_SETTING_DEPRECATED,
- strongModeNode.span);
}
}
}
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index 0b689ee..372e4e8 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -74,11 +74,6 @@
ANALYSIS_OPTION_DEPRECATED:
problemMessage: "The option '{0}' is no longer supported."
comment: An error code indicating that the given option is deprecated.
- ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT:
- sharedName: ANALYSIS_OPTION_DEPRECATED
- problemMessage: "The option '{0}' is no longer supported."
- correctionMessage: "Try using the new '{1}' option."
- comment: An error code indicating that the given option is deprecated.
INCLUDED_FILE_WARNING:
problemMessage: "Warning in the included options file {0}({1}..{2}): {3}"
comment: |-
diff --git a/pkg/analyzer/test/src/task/options_test.dart b/pkg/analyzer/test/src/task/options_test.dart
index 0afa6ef..bf13737 100644
--- a/pkg/analyzer/test/src/task/options_test.dart
+++ b/pkg/analyzer/test/src/task/options_test.dart
@@ -460,22 +460,6 @@
''', [AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED]);
}
- test_analyzer_strong_mode_deprecated_key_implicit_casts() {
- validate('''
-analyzer:
- strong-mode:
- implicit-casts: false
-''', [AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT]);
- }
-
- test_analyzer_strong_mode_deprecated_key_implicit_dynamic() {
- validate('''
-analyzer:
- strong-mode:
- implicit-dynamic: false
-''', [AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT]);
- }
-
test_analyzer_strong_mode_error_code_supported() {
validate('''
analyzer:
@@ -507,6 +491,14 @@
''', [AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUES]);
}
+ test_analyzer_strong_mode_unsupported_value() {
+ validate('''
+analyzer:
+ strong-mode:
+ implicit-dynamic: foo
+''', [AnalysisOptionsWarningCode.UNSUPPORTED_VALUE]);
+ }
+
test_analyzer_supported_exclude() {
validate('''
analyzer:
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
index 5ea1a4a..dca43e9 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
@@ -181,7 +181,11 @@
this,
path,
loadYamlDocument(
- workspace.resourceProvider.getFile(path).readAsStringSync(),
+ workspace
+ .getSession(path)!
+ .resourceProvider
+ .getFile(path)
+ .readAsStringSync(),
recover: true),
0);
_yamlFileEditBuilders[path] = builder;
diff --git a/tools/VERSION b/tools/VERSION
index f24b7e4..02e0b9d 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 17
PATCH 0
-PRERELEASE 245
+PRERELEASE 246
PRERELEASE_PATCH 0
\ No newline at end of file