diff --git a/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart b/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart index c63993a5c0d..3e195ddfa08 100644 --- a/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart +++ b/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart @@ -205,6 +205,13 @@ enum ExperimentalFlag { isExpired: false, experimentEnabledVersion: defaultLanguageVersion, experimentReleasedVersion: defaultLanguageVersion), + + wildcardVariables( + name: 'wildcard-variables', + isEnabledByDefault: false, + isExpired: false, + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion), ; final String name; diff --git a/pkg/analyzer/lib/dart/analysis/features.dart b/pkg/analyzer/lib/dart/analysis/features.dart index ffc7d7e3874..8a20789d776 100644 --- a/pkg/analyzer/lib/dart/analysis/features.dart +++ b/pkg/analyzer/lib/dart/analysis/features.dart @@ -84,6 +84,9 @@ abstract class Feature { /// Feature information for variance. static final variance = ExperimentalFeatures.variance; + /// Feature information for wildcard variables. + static final wildcard_variables = ExperimentalFeatures.wildcard_variables; + /// If the feature may be enabled or disabled on the command line, the /// experimental flag that may be used to enable it. Otherwise `null`. /// diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart index 8776192430a..ce4fd493320 100644 --- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart +++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart @@ -47,6 +47,7 @@ final _knownFeatures = { EnableString.triple_shift: ExperimentalFeatures.triple_shift, EnableString.unnamed_libraries: ExperimentalFeatures.unnamed_libraries, EnableString.variance: ExperimentalFeatures.variance, + EnableString.wildcard_variables: ExperimentalFeatures.wildcard_variables, }; /// Constant strings for enabling each of the currently known experimental @@ -135,6 +136,9 @@ class EnableString { /// String to enable the experiment "variance" static const String variance = 'variance'; + + /// String to enable the experiment "wildcard-variables" + static const String wildcard_variables = 'wildcard-variables'; } class ExperimentalFeatures { @@ -423,6 +427,17 @@ class ExperimentalFeatures { experimentalReleaseVersion: null, releaseVersion: null, ); + + static final wildcard_variables = ExperimentalFeature( + index: 28, + enableString: EnableString.wildcard_variables, + isEnabledByDefault: IsEnabledByDefault.wildcard_variables, + isExpired: IsExpired.wildcard_variables, + documentation: + 'Local declarations and parameters named `_` are non-binding.', + experimentalReleaseVersion: null, + releaseVersion: null, + ); } /// Constant bools indicating whether each experimental flag is currently @@ -511,6 +526,9 @@ class IsEnabledByDefault { /// Default state of the experiment "variance" static const bool variance = false; + + /// Default state of the experiment "wildcard-variables" + static const bool wildcard_variables = false; } /// Constant bools indicating whether each experimental flag is currently @@ -600,6 +618,9 @@ class IsExpired { /// Expiration status of the experiment "variance" static const bool variance = false; + + /// Expiration status of the experiment "wildcard-variables" + static const bool wildcard_variables = false; } mixin _CurrentState { @@ -699,5 +720,9 @@ mixin _CurrentState { /// Current state for the flag "variance" bool get variance => isEnabled(ExperimentalFeatures.variance); + /// Current state for the flag "wildcard-variables" + bool get wildcard_variables => + isEnabled(ExperimentalFeatures.wildcard_variables); + bool isEnabled(covariant ExperimentalFeature feature); } diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart index c98c4665709..a4cbe069412 100644 --- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart +++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart @@ -282,6 +282,14 @@ class ExperimentalFlag { enabledVersion: defaultLanguageVersion, experimentEnabledVersion: defaultLanguageVersion, experimentReleasedVersion: defaultLanguageVersion); + + static const ExperimentalFlag wildcardVariables = const ExperimentalFlag( + name: 'wildcard-variables', + isEnabledByDefault: false, + isExpired: false, + enabledVersion: defaultLanguageVersion, + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion); } /// Interface for accessing the global state of experimental features. @@ -445,6 +453,10 @@ class GlobalFeatures { GlobalFeature? _variance; GlobalFeature get variance => _variance ??= _computeGlobalFeature(ExperimentalFlag.variance); + + GlobalFeature? _wildcardVariables; + GlobalFeature get wildcardVariables => _wildcardVariables ??= + _computeGlobalFeature(ExperimentalFlag.wildcardVariables); } /// Interface for accessing the state of experimental features within a @@ -610,6 +622,11 @@ class LibraryFeatures { _variance ??= globalFeatures._computeLibraryFeature( ExperimentalFlag.variance, canonicalUri, libraryVersion); + LibraryFeature? _wildcardVariables; + LibraryFeature get wildcardVariables => + _wildcardVariables ??= globalFeatures._computeLibraryFeature( + ExperimentalFlag.wildcardVariables, canonicalUri, libraryVersion); + /// Returns the [LibraryFeature] corresponding to [experimentalFlag]. LibraryFeature fromSharedExperimentalFlags( shared.ExperimentalFlag experimentalFlag) { @@ -670,6 +687,8 @@ class LibraryFeatures { return unnamedLibraries; case shared.ExperimentalFlag.variance: return variance; + case shared.ExperimentalFlag.wildcardVariables: + return wildcardVariables; default: throw new UnsupportedError( 'LibraryFeatures.fromSharedExperimentalFlags($experimentalFlag)'); @@ -737,6 +756,8 @@ ExperimentalFlag? parseExperimentalFlag(String flag) { return ExperimentalFlag.unnamedLibraries; case "variance": return ExperimentalFlag.variance; + case "wildcard-variables": + return ExperimentalFlag.wildcardVariables; } return null; } @@ -791,6 +812,8 @@ final Map defaultExperimentalFlags = { ExperimentalFlag.unnamedLibraries: ExperimentalFlag.unnamedLibraries.isEnabledByDefault, ExperimentalFlag.variance: ExperimentalFlag.variance.isEnabledByDefault, + ExperimentalFlag.wildcardVariables: + ExperimentalFlag.wildcardVariables.isEnabledByDefault, }; const AllowedExperimentalFlags defaultAllowedExperimentalFlags = const AllowedExperimentalFlags( @@ -832,4 +855,5 @@ const Map sharedExperimentalFlags = { shared.ExperimentalFlag.tripleShift: ExperimentalFlag.tripleShift, shared.ExperimentalFlag.unnamedLibraries: ExperimentalFlag.unnamedLibraries, shared.ExperimentalFlag.variance: ExperimentalFlag.variance, + shared.ExperimentalFlag.wildcardVariables: ExperimentalFlag.wildcardVariables, }; diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml index db590fa6dbc..76ad4692afd 100644 --- a/tools/experimental_features.yaml +++ b/tools/experimental_features.yaml @@ -128,6 +128,9 @@ features: resource-identifiers: help: "Output arguments used by static functions." + wildcard-variables: + help: "Local declarations and parameters named `_` are non-binding." + # Experiment flag only used for testing. test-experiment: help: >-