# 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.2.2'
  expired: true

set-literals:
  help: "Set Literals"
  enabledIn: 2.2
  expired: true

spread-collections:
  help: "Spread Collections"
  enabledIn: '2.2.2'
  expired: true