blob: 04d6f84794bc98070b99fc9ff18c238b3f34b702 [file] [log] [blame] [view]
# Experiment flags
If you're implementing a language feature, then it needs to have an accompanying
experiment flag. (Or multiple experiments if it's going to be enabled over the
course of multiple releases.)
## Adding an experiment flag
Experiment flags are shared across all of the tools, so they are defined in a
single location. To add a new flag, edit
[`experimental_features.yaml`](https://github.com/dart-lang/sdk/blob/main/tools/experimental_features.yaml).
The initial commit is only required to define the name and to include a `help:`
key.
To generate the declarations used by the analyzer, run
`dart pkg/analyzer/tool/experiments/generate.dart`.
To generate the declarations used by the front-end, run
`dart pkg/front_end/tool/cfe.dart generate-experimental-flags`.
## Summary representation
The set of (the indexes of) enabled experiments is used to build the hash for
[summary files](summaries.md). If defining the new experiment flag changes the
indexes of existing experiment flags, then the value of the static field
`AnalysisDriver.DATA_VERSION` needs to be incremented.