From 2cfca4e67713e3891b3215559d89681ca69fc048 Mon Sep 17 00:00:00 2001 From: Kallen Tu Date: Wed, 8 May 2024 00:37:29 +0000 Subject: [PATCH] [wildcard-variables] Add experiment flag 'wildcards-variables'. Getting the flag out so we can at least start writing language and co19 tests. Adds the experiment flag so we can hide future wildcards work until we're ready to ship. Bug: https://github.com/dart-lang/sdk/issues/55654 Change-Id: I6185360f371bc7c3c7a109b33aeb7df44e1f1a60 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/365545 Reviewed-by: Konstantin Shcheglov Reviewed-by: Johnni Winther Reviewed-by: Nate Bosch Reviewed-by: Phil Quitslund Reviewed-by: Brian Wilkerson --- .../lib/src/experiments/flags.dart | 7 ++++++ pkg/analyzer/lib/dart/analysis/features.dart | 3 +++ .../lib/src/dart/analysis/experiments.g.dart | 25 +++++++++++++++++++ .../experimental_flags_generated.dart | 24 ++++++++++++++++++ tools/experimental_features.yaml | 3 +++ 5 files changed, 62 insertions(+) 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: >-