first cut experimental flag declaration file

Change-Id: I3acbd05e49985f0c01f775e6fef5743882be5b10
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/104021
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
new file mode 100644
index 0000000..ce20c7a
--- /dev/null
+++ b/tools/experimental_features.yaml
@@ -0,0 +1,91 @@
+# Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# Experimental features are described in docs/process/experimental-flags.md
+# (Despite the name, they are not really intended for experiments.)
+# They are intended to enable new features or enhancements that are being
+# developed and are not yet shipped. Experimental feature flags are expected
+# to be relatively short-lived.
+#
+# Each entry in this map corresponds to an experiment,
+# and contains the following parts:
+#
+# 1. help: (required text)
+#    A human readable description of the experiment.
+#
+# 2. enabledIn: (optional #.#)
+#    The Dart SDK version (<major>.<minor>) in which the experiment is shipping.
+#
+#    If this field is specified, then the experiment is enabled regardless of
+#    the actual version of the SDK. If this field is omitted, then the
+#    experiment is disabled by default, but may be enabled by specifying the
+#    flag on the command line. (e.g. --enable-experiment=non-nullable)
+#
+#    A version less than than this version may be specified in a .packages file
+#    or in a library language version override (e.g. // @dart = 2.1)
+#    to disable this feature. For more on library language version override, see
+#    https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/language-versioning.md
+#
+# 3. expired: (optional boolean)
+#    If true, then the experiment can no longer be enabled by specifying the
+#    flag on the command line, and the corresponding entry is slated for
+#    eventual removal from this file. If this field is omitted, then 'expired'
+#    is considered to be false.
+#
+# Using the above fields, experiments pass through several states:
+#
+# Disabled:
+#    When an experiment is first added to this file, the 'enabledIn' and
+# 'expired' fields are omitted and the experiment is disabled by default,
+# but may be enabled by specifying the flag on the command line.
+# The implementation teams begin building support for the feature,
+# guarded by the flag.  Users can enable the flag and begin to try out
+# the feature as it is being developed.
+#
+# Shipped:
+#    When an experiment is shipped, then the 'enabledIn' field is added
+# indicating which version of the SDK contains this new language feature.
+# At this point, specifying the flag on the command line has no effect because
+# the experiment is enabled by default and cannot be disabled.
+#
+# Retired or Rejected:
+#    At some point, the 'expired' field is added to the experiment indicating
+# that the flag is to be retired if the experiment has shipped or that the
+# entire experiment was rejected if the experiment has not shipped. It also
+# indicates that the corresponding entry is slated for eventual removal
+# from this file. Users specifying this flag on the command line should receive
+# a warning that the experiment has been retired or rejected, but the tool
+# should continue to run.
+
+constant-update-2018:
+  help: "Enhanced constant expressions"
+
+extension-methods:
+  help: "Extension Methods"
+
+non-nullable:
+  help: "Non Nullable by default"
+
+triple-shift:
+  help: "Triple-shift operator"
+
+#
+# Flags below this line are either retired or rejected, cannot be specified
+# on the command line, and will eventually be removed.
+#
+
+control-flow-collections:
+  help: "Control Flow Collections"
+  enabledIn: 2.3
+  expired: true
+
+set-literals:
+  help: "Set Literals"
+  enabledIn: 2.2
+  expired: true
+
+spread-collections:
+  help: "Spread Collections"
+  enabledIn: 2.3
+  expired: true
\ No newline at end of file