Move AnalysisOptionsFile (yaml keys and values) out of validator file.
Change-Id: I978acaac38a502fbd97683d1dc3631617924d720
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/443420
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/services/completion/yaml/analysis_options_generator.dart b/pkg/analysis_server/lib/src/services/completion/yaml/analysis_options_generator.dart
index 91b6ba0..056a674 100644
--- a/pkg/analysis_server/lib/src/services/completion/yaml/analysis_options_generator.dart
+++ b/pkg/analysis_server/lib/src/services/completion/yaml/analysis_options_generator.dart
@@ -8,7 +8,7 @@
import 'package:analyzer/dart/analysis/formatter_options.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/analysis_options/options_file_validator.dart';
+import 'package:analyzer/src/analysis_options/analysis_options_file.dart';
import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer/src/lint/registry.dart';
diff --git a/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart b/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart
index c9759e9..de5fe7c 100644
--- a/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart
@@ -4,7 +4,7 @@
import 'package:analysis_server/src/services/completion/yaml/analysis_options_generator.dart';
import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/analysis_options/options_file_validator.dart';
+import 'package:analyzer/src/analysis_options/analysis_options_file.dart';
import 'package:analyzer/src/lint/linter.dart';
import 'package:analyzer/src/test_utilities/lint_registration_mixin.dart';
import 'package:linter/src/rules.dart';
diff --git a/pkg/analyzer/lib/source/error_processor.dart b/pkg/analyzer/lib/source/error_processor.dart
index 0ef1d20..eaffd4c 100644
--- a/pkg/analyzer/lib/source/error_processor.dart
+++ b/pkg/analyzer/lib/source/error_processor.dart
@@ -4,7 +4,7 @@
import 'package:analyzer/diagnostic/diagnostic.dart';
import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/analysis_options/options_file_validator.dart';
+import 'package:analyzer/src/analysis_options/analysis_options_file.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:collection/collection.dart';
import 'package:meta/meta.dart';
diff --git a/pkg/analyzer/lib/src/analysis_options/analysis_options_file.dart b/pkg/analyzer/lib/src/analysis_options/analysis_options_file.dart
new file mode 100644
index 0000000..6a6d291
--- /dev/null
+++ b/pkg/analyzer/lib/src/analysis_options/analysis_options_file.dart
@@ -0,0 +1,114 @@
+// Copyright (c) 2025, 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:analyzer/source/error_processor.dart';
+import 'package:analyzer/src/utilities/extensions/string.dart';
+
+/// Options (keys) that can be specified in an analysis options file.
+final class AnalysisOptionsFile {
+ // Top-level options.
+ static const String analyzer = 'analyzer';
+ static const String codeStyle = 'code-style';
+ static const String formatter = 'formatter';
+ static const String linter = 'linter';
+
+ /// The shared key for top-level plugins and `analyzer`-level plugins.
+ static const String plugins = 'plugins';
+
+ // `analyzer` analysis options.
+ static const String cannotIgnore = 'cannot-ignore';
+ static const String enableExperiment = 'enable-experiment';
+ static const String errors = 'errors';
+ static const String exclude = 'exclude';
+ static const String include = 'include';
+ static const String language = 'language';
+ static const String optionalChecks = 'optional-checks';
+ static const String strongMode = 'strong-mode';
+
+ // Optional checks options.
+ static const String chromeOsManifestChecks = 'chrome-os-manifest-checks';
+
+ // Strong mode options (see AnalysisOptionsImpl for documentation).
+ static const String declarationCasts = 'declaration-casts';
+ static const String implicitCasts = 'implicit-casts';
+ static const String implicitDynamic = 'implicit-dynamic';
+
+ // Language options (see AnalysisOptionsImpl for documentation).
+ static const String strictCasts = 'strict-casts';
+ static const String strictInference = 'strict-inference';
+ static const String strictRawTypes = 'strict-raw-types';
+
+ // Code style options.
+ static const String format = 'format';
+
+ /// Ways to say `ignore`.
+ static const List<String> ignoreSynonyms = ['ignore', 'false'];
+
+ /// Valid error `severity`s.
+ static final List<String> severities = List.unmodifiable(severityMap.keys);
+
+ /// Ways to say `include`.
+ static const List<String> includeSynonyms = ['include', 'true'];
+
+ // Formatter options.
+ static const String pageWidth = 'page_width';
+ static const String trailingCommas = 'trailing_commas';
+
+ // Linter options.
+ static const String rules = 'rules';
+
+ // Plugins options.
+ static const String diagnostics = 'diagnostics';
+ static const String path = 'path';
+ static const String version = 'version';
+
+ /// Supported 'plugins' options.
+ static const Set<String> pluginsOptions = {diagnostics, path, version};
+
+ static const String propagateLinterExceptions = 'propagate-linter-exceptions';
+
+ /// Ways to say `true` or `false`.
+ static const List<String> trueOrFalse = ['true', 'false'];
+
+ /// Supported top-level `analyzer` options.
+ static const Set<String> analyzerOptions = {
+ cannotIgnore,
+ enableExperiment,
+ errors,
+ exclude,
+ language,
+ optionalChecks,
+ plugins,
+ strongMode,
+ };
+
+ /// Supported `analyzer` strong-mode options.
+ ///
+ /// This section is deprecated.
+ static const Set<String> strongModeOptions = {
+ declarationCasts,
+ implicitCasts,
+ implicitDynamic,
+ };
+
+ /// Supported `analyzer` language options.
+ static const Set<String> languageOptions = {
+ strictCasts,
+ strictInference,
+ strictRawTypes,
+ };
+
+ /// Supported 'linter' options.
+ static const Set<String> linterOptions = {rules};
+
+ /// Supported 'analyzer' optional checks options.
+ static const Set<String> optionalChecksOptions = {
+ chromeOsManifestChecks,
+ propagateLinterExceptions,
+ };
+
+ /// Proposed values for a `true` or `false` option.
+ static String get trueOrFalseProposal =>
+ AnalysisOptionsFile.trueOrFalse.quotedAndCommaSeparatedWithAnd;
+}
diff --git a/pkg/analyzer/lib/src/analysis_options/analysis_options_provider.dart b/pkg/analyzer/lib/src/analysis_options/analysis_options_provider.dart
index ca6defe..b6ed248 100644
--- a/pkg/analyzer/lib/src/analysis_options/analysis_options_provider.dart
+++ b/pkg/analyzer/lib/src/analysis_options/analysis_options_provider.dart
@@ -5,7 +5,7 @@
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/source/file_source.dart';
import 'package:analyzer/source/source.dart';
-import 'package:analyzer/src/analysis_options/options_file_validator.dart';
+import 'package:analyzer/src/analysis_options/analysis_options_file.dart';
import 'package:analyzer/src/generated/source.dart' show SourceFactory;
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
import 'package:analyzer/src/util/yaml.dart';
diff --git a/pkg/analyzer/lib/src/analysis_options/options_file_validator.dart b/pkg/analyzer/lib/src/analysis_options/options_file_validator.dart
index 42ab71f..2157816 100644
--- a/pkg/analyzer/lib/src/analysis_options/options_file_validator.dart
+++ b/pkg/analyzer/lib/src/analysis_options/options_file_validator.dart
@@ -6,8 +6,8 @@
import 'package:analyzer/diagnostic/diagnostic.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/source/error_processor.dart';
import 'package:analyzer/source/source.dart';
+import 'package:analyzer/src/analysis_options/analysis_options_file.dart';
import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
import 'package:analyzer/src/analysis_options/error/option_codes.dart';
import 'package:analyzer/src/analysis_options/options_validator.dart';
@@ -260,114 +260,6 @@
return recorder.diagnostics;
}
-/// Options (keys) that can be specified in an analysis options file.
-final class AnalysisOptionsFile {
- // Top-level options.
- static const String analyzer = 'analyzer';
- static const String codeStyle = 'code-style';
- static const String formatter = 'formatter';
- static const String linter = 'linter';
-
- /// The shared key for top-level plugins and `analyzer`-level plugins.
- static const String plugins = 'plugins';
-
- // `analyzer` analysis options.
- static const String cannotIgnore = 'cannot-ignore';
- static const String enableExperiment = 'enable-experiment';
- static const String errors = 'errors';
- static const String exclude = 'exclude';
- static const String include = 'include';
- static const String language = 'language';
- static const String optionalChecks = 'optional-checks';
- static const String strongMode = 'strong-mode';
-
- // Optional checks options.
- static const String chromeOsManifestChecks = 'chrome-os-manifest-checks';
-
- // Strong mode options (see AnalysisOptionsImpl for documentation).
- static const String declarationCasts = 'declaration-casts';
- static const String implicitCasts = 'implicit-casts';
- static const String implicitDynamic = 'implicit-dynamic';
-
- // Language options (see AnalysisOptionsImpl for documentation).
- static const String strictCasts = 'strict-casts';
- static const String strictInference = 'strict-inference';
- static const String strictRawTypes = 'strict-raw-types';
-
- // Code style options.
- static const String format = 'format';
-
- /// Ways to say `ignore`.
- static const List<String> ignoreSynonyms = ['ignore', 'false'];
-
- /// Valid error `severity`s.
- static final List<String> severities = List.unmodifiable(severityMap.keys);
-
- /// Ways to say `include`.
- static const List<String> includeSynonyms = ['include', 'true'];
-
- // Formatter options.
- static const String pageWidth = 'page_width';
- static const String trailingCommas = 'trailing_commas';
-
- // Linter options.
- static const String rules = 'rules';
-
- // Plugins options.
- static const String diagnostics = 'diagnostics';
- static const String path = 'path';
- static const String version = 'version';
-
- /// Supported 'plugins' options.
- static const Set<String> _pluginsOptions = {diagnostics, path, version};
-
- static const String propagateLinterExceptions = 'propagate-linter-exceptions';
-
- /// Ways to say `true` or `false`.
- static const List<String> _trueOrFalse = ['true', 'false'];
-
- /// Supported top-level `analyzer` options.
- static const Set<String> _analyzerOptions = {
- cannotIgnore,
- enableExperiment,
- errors,
- exclude,
- language,
- optionalChecks,
- plugins,
- strongMode,
- };
-
- /// Supported `analyzer` strong-mode options.
- ///
- /// This section is deprecated.
- static const Set<String> _strongModeOptions = {
- declarationCasts,
- implicitCasts,
- implicitDynamic,
- };
-
- /// Supported `analyzer` language options.
- static const Set<String> _languageOptions = {
- strictCasts,
- strictInference,
- strictRawTypes,
- };
-
- /// Supported 'linter' options.
- static const Set<String> _linterOptions = {rules};
-
- /// Supported 'analyzer' optional checks options.
- static const Set<String> _optionalChecksOptions = {
- chromeOsManifestChecks,
- propagateLinterExceptions,
- };
-
- /// Proposed values for a `true` or `false` option.
- static String get _trueOrFalseProposal =>
- AnalysisOptionsFile._trueOrFalse.quotedAndCommaSeparatedWithAnd;
-}
-
/// Validates `analyzer` options.
class AnalyzerOptionsValidator extends _CompositeValidator {
AnalyzerOptionsValidator()
@@ -419,7 +311,7 @@
/// Validates `analyzer` top-level options.
class _AnalyzerTopLevelOptionsValidator extends _TopLevelOptionValidator {
_AnalyzerTopLevelOptionsValidator()
- : super(AnalysisOptionsFile.analyzer, AnalysisOptionsFile._analyzerOptions);
+ : super(AnalysisOptionsFile.analyzer, AnalysisOptionsFile.analyzerOptions);
}
/// Validates the `analyzer` `cannot-ignore` option.
@@ -540,7 +432,7 @@
arguments: [
AnalysisOptionsFile.format,
format.valueOrThrow,
- AnalysisOptionsFile._trueOrFalseProposal,
+ AnalysisOptionsFile.trueOrFalseProposal,
],
);
}
@@ -812,7 +704,7 @@
/// Validates `analyzer` language configuration options.
class _LanguageOptionValidator extends OptionsValidator {
final _ErrorBuilder _builder = _ErrorBuilder(
- AnalysisOptionsFile._languageOptions,
+ AnalysisOptionsFile.languageOptions,
);
@override
@@ -826,7 +718,7 @@
bool validKey = false;
if (k is YamlScalar) {
key = k.value?.toString();
- if (!AnalysisOptionsFile._languageOptions.contains(key)) {
+ if (!AnalysisOptionsFile.languageOptions.contains(key)) {
_builder.reportError(reporter, AnalysisOptionsFile.language, k);
} else {
// If we have a valid key, go on and check the value.
@@ -837,14 +729,14 @@
value = toLowerCase(v.value);
// `null` is not a valid key, so we can safely assume `key` is
// non-`null`.
- if (!AnalysisOptionsFile._trueOrFalse.contains(value)) {
+ if (!AnalysisOptionsFile.trueOrFalse.contains(value)) {
reporter.atSourceSpan(
v.span,
AnalysisOptionsWarningCode.UNSUPPORTED_VALUE,
arguments: [
key!,
v.valueOrThrow,
- AnalysisOptionsFile._trueOrFalseProposal,
+ AnalysisOptionsFile.trueOrFalseProposal,
],
);
}
@@ -967,13 +859,13 @@
/// Validates `linter` top-level options.
class _LinterTopLevelOptionsValidator extends _TopLevelOptionValidator {
_LinterTopLevelOptionsValidator()
- : super(AnalysisOptionsFile.linter, AnalysisOptionsFile._linterOptions);
+ : super(AnalysisOptionsFile.linter, AnalysisOptionsFile.linterOptions);
}
/// Validates `analyzer` optional-checks value configuration options.
class _OptionalChecksValueValidator extends OptionsValidator {
final _ErrorBuilder _builder = _ErrorBuilder(
- AnalysisOptionsFile._optionalChecksOptions,
+ AnalysisOptionsFile.optionalChecksOptions,
);
@override
@@ -1003,14 +895,14 @@
);
} else {
value = toLowerCase(v.value);
- if (!AnalysisOptionsFile._trueOrFalse.contains(value)) {
+ if (!AnalysisOptionsFile.trueOrFalse.contains(value)) {
reporter.atSourceSpan(
v.span,
AnalysisOptionsWarningCode.UNSUPPORTED_VALUE,
arguments: [
key!,
v.valueOrThrow,
- AnalysisOptionsFile._trueOrFalseProposal,
+ AnalysisOptionsFile.trueOrFalseProposal,
],
);
}
@@ -1031,7 +923,7 @@
/// Validates options for each `plugins` map value.
class _PluginsOptionsValidator extends OptionsValidator {
final _ErrorBuilder _builder = _ErrorBuilder(
- AnalysisOptionsFile._pluginsOptions,
+ AnalysisOptionsFile.pluginsOptions,
);
@override
@@ -1082,7 +974,7 @@
) {
pluginValue.nodes.forEach((pluginMapKeyNode, pluginMapValueNode) {
if (pluginMapKeyNode case YamlScalar(value: String pluginMapKey)) {
- if (!AnalysisOptionsFile._pluginsOptions.contains(pluginMapKey)) {
+ if (!AnalysisOptionsFile.pluginsOptions.contains(pluginMapKey)) {
_builder.reportError(
reporter,
'${AnalysisOptionsFile.plugins}/$pluginName',
@@ -1100,7 +992,7 @@
/// Validates `analyzer` strong-mode value configuration options.
class _StrongModeOptionValueValidator extends OptionsValidator {
final _ErrorBuilder _builder = _ErrorBuilder(
- AnalysisOptionsFile._strongModeOptions,
+ AnalysisOptionsFile.strongModeOptions,
);
@override
@@ -1127,7 +1019,7 @@
strongModeNode.nodes.forEach((k, v) {
if (k is YamlScalar) {
var key = k.value?.toString();
- if (!AnalysisOptionsFile._strongModeOptions.contains(key)) {
+ if (!AnalysisOptionsFile.strongModeOptions.contains(key)) {
_builder.reportError(reporter, AnalysisOptionsFile.strongMode, k);
} else if (key == AnalysisOptionsFile.declarationCasts) {
reporter.atSourceSpan(
@@ -1136,21 +1028,21 @@
arguments: [
AnalysisOptionsFile.strongMode,
v.valueOrThrow,
- AnalysisOptionsFile._trueOrFalseProposal,
+ AnalysisOptionsFile.trueOrFalseProposal,
],
);
} else {
// The key is valid.
if (v is YamlScalar) {
var value = toLowerCase(v.value);
- if (!AnalysisOptionsFile._trueOrFalse.contains(value)) {
+ if (!AnalysisOptionsFile.trueOrFalse.contains(value)) {
reporter.atSourceSpan(
v.span,
AnalysisOptionsWarningCode.UNSUPPORTED_VALUE,
arguments: [
key!,
v.valueOrThrow,
- AnalysisOptionsFile._trueOrFalseProposal,
+ AnalysisOptionsFile.trueOrFalseProposal,
],
);
}
diff --git a/pkg/analyzer/lib/src/dart/analysis/analysis_options.dart b/pkg/analyzer/lib/src/dart/analysis/analysis_options.dart
index e237687..eceb9d5 100644
--- a/pkg/analyzer/lib/src/dart/analysis/analysis_options.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/analysis_options.dart
@@ -11,8 +11,8 @@
import 'package:analyzer/error/error.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/source/error_processor.dart';
+import 'package:analyzer/src/analysis_options/analysis_options_file.dart';
import 'package:analyzer/src/analysis_options/code_style_options.dart';
-import 'package:analyzer/src/analysis_options/options_file_validator.dart';
import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer/src/generated/utilities_general.dart' show toBool;
import 'package:analyzer/src/lint/config.dart';
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
index 97d9be1..6fc80def9 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
@@ -6,8 +6,8 @@
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/physical_file_system.dart'
show PhysicalResourceProvider;
+import 'package:analyzer/src/analysis_options/analysis_options_file.dart';
import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
-import 'package:analyzer/src/analysis_options/options_file_validator.dart';
import 'package:analyzer/src/context/packages.dart';
import 'package:analyzer/src/dart/analysis/analysis_options.dart';
import 'package:analyzer/src/dart/analysis/context_root.dart';
diff --git a/pkg/analyzer/lib/src/lint/config.dart b/pkg/analyzer/lib/src/lint/config.dart
index c001572..6f9bae4 100644
--- a/pkg/analyzer/lib/src/lint/config.dart
+++ b/pkg/analyzer/lib/src/lint/config.dart
@@ -2,7 +2,7 @@
// 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:analyzer/src/analysis_options/options_file_validator.dart';
+import 'package:analyzer/src/analysis_options/analysis_options_file.dart';
import 'package:analyzer/src/util/yaml.dart';
import 'package:yaml/yaml.dart';