| # 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. |