support enabling experiments when starting the compiler (#1314)
diff --git a/frontend_server_client/CHANGELOG.md b/frontend_server_client/CHANGELOG.md
index 8544ef4..f8659ac 100644
--- a/frontend_server_client/CHANGELOG.md
+++ b/frontend_server_client/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.1.0
+
+- Support enabling experiments when starting the compiler.
+
## 2.0.1
- Widen the upper bound sdk constraint to `<3.0.0`. The frontend server api
diff --git a/frontend_server_client/lib/src/frontend_server_client.dart b/frontend_server_client/lib/src/frontend_server_client.dart
index fc77c90..0f3a285 100644
--- a/frontend_server_client/lib/src/frontend_server_client.dart
+++ b/frontend_server_client/lib/src/frontend_server_client.dart
@@ -46,6 +46,7 @@
String platformKernel, {
String dartdevcModuleFormat = 'amd',
bool debug = false,
+ List<String>? enabledExperiments,
bool enableHttpUris = false,
List<String> fileSystemRoots = const [], // For `fileSystemScheme` uris,
String fileSystemScheme =
@@ -76,6 +77,9 @@
'--incremental',
if (verbose) '--verbose',
if (!printIncrementalDependencies) '--no-print-incremental-dependencies',
+ if (enabledExperiments != null)
+ for (var experiment in enabledExperiments)
+ '--enable-experiment=$experiment',
]);
var feServerStdoutLines = StreamQueue(feServer.stdout
.transform(utf8.decoder)
diff --git a/frontend_server_client/pubspec.yaml b/frontend_server_client/pubspec.yaml
index 921ea14..4e0cf65 100644
--- a/frontend_server_client/pubspec.yaml
+++ b/frontend_server_client/pubspec.yaml
@@ -1,5 +1,5 @@
name: frontend_server_client
-version: 2.0.1
+version: 2.1.0
description: >-
Client code to start and interact with the frontend_server compiler from the
Dart SDK.
diff --git a/frontend_server_client/test/frontend_sever_client_test.dart b/frontend_server_client/test/frontend_sever_client_test.dart
index 87abd76..9fb0c23 100644
--- a/frontend_server_client/test/frontend_sever_client_test.dart
+++ b/frontend_server_client/test/frontend_sever_client_test.dart
@@ -237,6 +237,34 @@
utf8.decode(dartDevcClient.assetBytes('${entrypointUri.path}.lib.js')!),
contains('goodbye'));
});
+
+ test('can enable experiments', () async {
+ await d.dir('a', [
+ d.dir('bin', [
+ d.file('nnbd.dart', '''
+// @dart=2.10
+
+// Compile time error if nnbd is enabled
+int x;
+
+void main() {
+ print(x);
+}
+''')
+ ])
+ ]).create();
+ var entrypoint = p.join(packageRoot, 'bin', 'nnbd.dart');
+ client = await FrontendServerClient.start(
+ entrypoint, p.join(packageRoot, 'out.dill'), vmPlatformDill,
+ enabledExperiments: ['non-nullable']);
+ var result = await client.compile();
+ if (result == null) {
+ fail('Expected compilation to be non-null');
+ }
+ client.accept();
+ expect(result.errorCount, 1);
+ expect(result.compilerOutputLines, contains(contains('int x;')));
+ });
}
Future<Isolate> waitForIsolatesAndResume(VmService vmService) async {