[cfe,analyzer] tweak to generated files to reduce chance of conflict.

This updates the generator of experimental flags to only refer to one
location for the current default language version.

Semantically the change does nothing, but it could make CLs that bump a
version smaller and easier to revert/patch.

Change-Id: I1c18c8e8105dfb33a302949ad2cfa159dae2addf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/325660
Reviewed-by: Alexander Thomas <athom@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Sigmund Cherem <sigmund@google.com>
This commit is contained in:
Sigmund Cherem
2023-09-13 16:23:44 +00:00
committed by Commit Queue
parent 83fc1c2af8
commit 38f62d2159
5 changed files with 78 additions and 83 deletions
@@ -6,6 +6,7 @@
//
// Instead modify 'tools/experimental_features.yaml' and run
// 'dart pkg/front_end/tool/fasta.dart generate-experimental-flags' to update.
const Version defaultLanguageVersion = const Version(3, 2);
/// Enum for experimental flags shared between the CFE and the analyzer.
enum ExperimentalFlag {
@@ -20,8 +21,8 @@ enum ExperimentalFlag {
name: 'const-functions',
isEnabledByDefault: false,
isExpired: false,
experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2)),
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion),
constantUpdate2018(
name: 'constant-update-2018',
@@ -83,15 +84,15 @@ enum ExperimentalFlag {
name: 'inline-class',
isEnabledByDefault: false,
isExpired: false,
experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2)),
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion),
macros(
name: 'macros',
isEnabledByDefault: false,
isExpired: false,
experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2)),
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion),
namedArgumentsAnywhere(
name: 'named-arguments-anywhere',
@@ -104,8 +105,8 @@ enum ExperimentalFlag {
name: 'native-assets',
isEnabledByDefault: false,
isExpired: false,
experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2)),
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion),
nonNullable(
name: 'non-nullable',
@@ -167,8 +168,8 @@ enum ExperimentalFlag {
name: 'test-experiment',
isEnabledByDefault: false,
isExpired: false,
experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2)),
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion),
tripleShift(
name: 'triple-shift',
@@ -188,8 +189,8 @@ enum ExperimentalFlag {
name: 'variance',
isEnabledByDefault: false,
isExpired: false,
experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2)),
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion),
;
final String name;
@@ -4,6 +4,8 @@
import 'package:_fe_analyzer_shared/src/experiments/flags.dart' as shared;
import 'package:kernel/kernel.dart' show Version;
import 'package:kernel/default_language_version.dart'
show defaultLanguageVersion;
part 'experimental_flags_generated.dart';
@@ -71,9 +71,9 @@ class ExperimentalFlag {
name: 'const-functions',
isEnabledByDefault: false,
isExpired: false,
enabledVersion: const Version(3, 2),
experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2));
enabledVersion: defaultLanguageVersion,
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion);
static const ExperimentalFlag constantUpdate2018 = const ExperimentalFlag(
name: 'constant-update-2018',
@@ -143,17 +143,17 @@ class ExperimentalFlag {
name: 'inline-class',
isEnabledByDefault: false,
isExpired: false,
enabledVersion: const Version(3, 2),
experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2));
enabledVersion: defaultLanguageVersion,
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion);
static const ExperimentalFlag macros = const ExperimentalFlag(
name: 'macros',
isEnabledByDefault: false,
isExpired: false,
enabledVersion: const Version(3, 2),
experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2));
enabledVersion: defaultLanguageVersion,
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion);
static const ExperimentalFlag namedArgumentsAnywhere = const ExperimentalFlag(
name: 'named-arguments-anywhere',
@@ -167,9 +167,9 @@ class ExperimentalFlag {
name: 'native-assets',
isEnabledByDefault: false,
isExpired: false,
enabledVersion: const Version(3, 2),
experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2));
enabledVersion: defaultLanguageVersion,
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion);
static const ExperimentalFlag nonNullable = const ExperimentalFlag(
name: 'non-nullable',
@@ -239,9 +239,9 @@ class ExperimentalFlag {
name: 'test-experiment',
isEnabledByDefault: false,
isExpired: false,
enabledVersion: const Version(3, 2),
experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2));
enabledVersion: defaultLanguageVersion,
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion);
static const ExperimentalFlag tripleShift = const ExperimentalFlag(
name: 'triple-shift',
@@ -263,9 +263,9 @@ class ExperimentalFlag {
name: 'variance',
isEnabledByDefault: false,
isExpired: false,
enabledVersion: const Version(3, 2),
experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2));
enabledVersion: defaultLanguageVersion,
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion);
}
/// Interface for accessing the global state of experimental features.
@@ -64,15 +64,6 @@ String generateFeAnalyzerSharedFile(Uri repoDir) {
Map<dynamic, dynamic> yaml =
loadYaml(new File.fromUri(yamlFile).readAsStringSync());
int currentVersionMajor;
int currentVersionMinor;
{
String currentVersion = getAsVersionNumberString(yaml['current-version'])!;
List<String> split = currentVersion.split(".");
currentVersionMajor = int.parse(split[0]);
currentVersionMinor = int.parse(split[1]);
}
StringBuffer sb = new StringBuffer();
sb.write('''
@@ -84,6 +75,18 @@ String generateFeAnalyzerSharedFile(Uri repoDir) {
//
// Instead modify 'tools/experimental_features.yaml' and run
// 'dart pkg/front_end/tool/fasta.dart generate-experimental-flags' to update.
''');
int currentVersionMajor;
int currentVersionMinor;
{
String currentVersion = getAsVersionNumberString(yaml['current-version'])!;
List<String> split = currentVersion.split(".");
currentVersionMajor = int.parse(split[0]);
currentVersionMinor = int.parse(split[1]);
}
sb.write('''
const Version defaultLanguageVersion = const Version($currentVersionMajor, $currentVersionMinor);
/// Enum for experimental flags shared between the CFE and the analyzer.
enum ExperimentalFlag {
@@ -105,17 +108,16 @@ enum ExperimentalFlag {
List<String> keys = features.keys.toList()..sort();
for (String key in keys) {
String identifier = keyToIdentifier(key);
int enabledInMajor;
int enabledInMinor;
String enabledInVersion;
String? enabledIn =
getAsVersionNumberString((features[key] as YamlMap)['enabledIn']);
if (enabledIn == null) {
enabledInMajor = currentVersionMajor;
enabledInMinor = currentVersionMinor;
enabledInVersion = 'defaultLanguageVersion';
} else {
List<String> split = enabledIn.split(".");
enabledInMajor = int.parse(split[0]);
enabledInMinor = int.parse(split[1]);
int enabledInMajor = int.parse(split[0]);
int enabledInMinor = int.parse(split[1]);
enabledInVersion = 'const Version($enabledInMajor, $enabledInMinor)';
}
bool? expired = (features[key] as YamlMap)['expired'];
bool shipped = (features[key] as YamlMap)['enabledIn'] != null;
@@ -124,21 +126,21 @@ enum ExperimentalFlag {
throw 'Cannot mark shipped feature "$key" as "expired: false"';
}
}
int releaseMajor;
int releaseMinor;
String releasedInVersion;
String? experimentalReleaseVersion = getAsVersionNumberString(
(features[key] as YamlMap)['experimentalReleaseVersion']);
if (experimentalReleaseVersion != null) {
List<String> split = experimentalReleaseVersion.split(".");
releaseMajor = int.parse(split[0]);
releaseMinor = int.parse(split[1]);
int releaseMajor = int.parse(split[0]);
int releaseMinor = int.parse(split[1]);
releasedInVersion = 'const Version($releaseMajor, $releaseMinor)';
} else if (enabledIn != null) {
List<String> split = enabledIn.split(".");
releaseMajor = int.parse(split[0]);
releaseMinor = int.parse(split[1]);
int releaseMajor = int.parse(split[0]);
int releaseMinor = int.parse(split[1]);
releasedInVersion = 'const Version($releaseMajor, $releaseMinor)';
} else {
releaseMajor = currentVersionMajor;
releaseMinor = currentVersionMinor;
releasedInVersion = 'defaultLanguageVersion';
}
sb.writeln('''
@@ -146,8 +148,8 @@ enum ExperimentalFlag {
name: '$key',
isEnabledByDefault: $shipped,
isExpired: ${expired == true},
experimentEnabledVersion: const Version($enabledInMajor, $enabledInMinor),
experimentReleasedVersion: const Version($releaseMajor, $releaseMinor)),
experimentEnabledVersion: $enabledInVersion,
experimentReleasedVersion: $releasedInVersion),
''');
}
sb.write('''
@@ -211,7 +213,7 @@ String generateKernelFile(Uri repoDir) {
import "ast.dart";
Version defaultLanguageVersion = const Version($currentVersionMajor, $currentVersionMinor);
const Version defaultLanguageVersion = const Version($currentVersionMajor, $currentVersionMinor);
''');
return new DartFormatter().format("$sb");
@@ -222,15 +224,6 @@ String generateCfeFile(Uri repoDir) {
Map<dynamic, dynamic> yaml =
loadYaml(new File.fromUri(yamlFile).readAsStringSync());
int currentVersionMajor;
int currentVersionMinor;
{
String currentVersion = getAsVersionNumberString(yaml['current-version'])!;
List<String> split = currentVersion.split(".");
currentVersionMajor = int.parse(split[0]);
currentVersionMinor = int.parse(split[1]);
}
StringBuffer sb = new StringBuffer();
sb.write('''
@@ -307,17 +300,16 @@ class ExperimentalFlag {
''');
for (String key in keys) {
String identifier = keyToIdentifier(key);
int enabledInMajor;
int enabledInMinor;
String enabledInVersion;
String? enabledIn =
getAsVersionNumberString((features[key] as YamlMap)['enabledIn']);
if (enabledIn == null) {
enabledInMajor = currentVersionMajor;
enabledInMinor = currentVersionMinor;
enabledInVersion = 'defaultLanguageVersion';
} else {
List<String> split = enabledIn.split(".");
enabledInMajor = int.parse(split[0]);
enabledInMinor = int.parse(split[1]);
int enabledInMajor = int.parse(split[0]);
int enabledInMinor = int.parse(split[1]);
enabledInVersion = 'const Version($enabledInMajor, $enabledInMinor)';
}
bool? expired = (features[key] as YamlMap)['expired'];
bool shipped = (features[key] as YamlMap)['enabledIn'] != null;
@@ -326,21 +318,21 @@ class ExperimentalFlag {
throw 'Cannot mark shipped feature "$key" as "expired: false"';
}
}
int releaseMajor;
int releaseMinor;
String releasedInVersion;
String? experimentalReleaseVersion = getAsVersionNumberString(
(features[key] as YamlMap)['experimentalReleaseVersion']);
if (experimentalReleaseVersion != null) {
List<String> split = experimentalReleaseVersion.split(".");
releaseMajor = int.parse(split[0]);
releaseMinor = int.parse(split[1]);
int releaseMajor = int.parse(split[0]);
int releaseMinor = int.parse(split[1]);
releasedInVersion = 'const Version($releaseMajor, $releaseMinor)';
} else if (enabledIn != null) {
List<String> split = enabledIn.split(".");
releaseMajor = int.parse(split[0]);
releaseMinor = int.parse(split[1]);
int releaseMajor = int.parse(split[0]);
int releaseMinor = int.parse(split[1]);
releasedInVersion = 'const Version($releaseMajor, $releaseMinor)';
} else {
releaseMajor = currentVersionMajor;
releaseMinor = currentVersionMinor;
releasedInVersion = 'defaultLanguageVersion';
}
sb.writeln('''
@@ -349,9 +341,9 @@ class ExperimentalFlag {
name: '$key',
isEnabledByDefault: $shipped,
isExpired: ${expired == true},
enabledVersion: const Version($enabledInMajor, $enabledInMinor),
experimentEnabledVersion: const Version($enabledInMajor, $enabledInMinor),
experimentReleasedVersion: const Version($releaseMajor, $releaseMinor));
enabledVersion: $enabledInVersion,
experimentEnabledVersion: $enabledInVersion,
experimentReleasedVersion: $releasedInVersion);
''');
}
sb.write('''
+1 -1
View File
@@ -9,4 +9,4 @@
import "ast.dart";
Version defaultLanguageVersion = const Version(3, 2);
const Version defaultLanguageVersion = const Version(3, 2);