Skip to content

Commit

Permalink
[wildcard-variables] Add experiment flag 'wildcards-variables'.
Browse files Browse the repository at this point in the history
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: #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>
  • Loading branch information
kallentu committed May 8, 2024
1 parent 8e5b70a commit 2cfca4e
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 0 deletions.
7 changes: 7 additions & 0 deletions pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 3 additions & 0 deletions pkg/analyzer/lib/dart/analysis/features.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
///
Expand Down
25 changes: 25 additions & 0 deletions pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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)');
Expand Down Expand Up @@ -737,6 +756,8 @@ ExperimentalFlag? parseExperimentalFlag(String flag) {
return ExperimentalFlag.unnamedLibraries;
case "variance":
return ExperimentalFlag.variance;
case "wildcard-variables":
return ExperimentalFlag.wildcardVariables;
}
return null;
}
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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,
};
3 changes: 3 additions & 0 deletions tools/experimental_features.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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: >-
Expand Down

0 comments on commit 2cfca4e

Please sign in to comment.