[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 <scheglov@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Nate Bosch <nbosch@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Kallen Tu 2024-05-08 00:37:29 +00:00
parent 8e5b70a081
commit 2cfca4e677
5 changed files with 62 additions and 0 deletions

View file

@ -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;

View file

@ -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`.
///

View file

@ -47,6 +47,7 @@ final _knownFeatures = <String, ExperimentalFeature>{
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);
}

View file

@ -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<ExperimentalFlag, bool> 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<shared.ExperimentalFlag, ExperimentalFlag> sharedExperimentalFlags = {
shared.ExperimentalFlag.tripleShift: ExperimentalFlag.tripleShift,
shared.ExperimentalFlag.unnamedLibraries: ExperimentalFlag.unnamedLibraries,
shared.ExperimentalFlag.variance: ExperimentalFlag.variance,
shared.ExperimentalFlag.wildcardVariables: ExperimentalFlag.wildcardVariables,
};

View file

@ -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: >-