[dart-cli]: delegate arg parsing to the underlying dart2js command
Since we anyways delegate all work to the same snapshot, this allows us
to maintain the argument parsing in a single location and makes it easier to
migrate existing usages of `dart2js ...` to `dart compile js ...`.
Change-Id: I24172fc87c040128d552cf68b98094e1c2f2c22f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/204421
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Sigmund Cherem <sigmund@google.com>
diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart
index 3b476e4..5027f18 100644
--- a/pkg/dartdev/lib/src/commands/compile.dart
+++ b/pkg/dartdev/lib/src/commands/compile.dart
@@ -5,6 +5,7 @@
import 'dart:async';
import 'dart:io';
+import 'package:args/args.dart';
import 'package:dart2native/generate.dart';
import 'package:front_end/src/api_prototype/compiler_options.dart'
show Verbosity;
@@ -66,89 +67,28 @@
class CompileJSCommand extends CompileSubcommandCommand {
static const String cmdName = 'js';
- CompileJSCommand({bool verbose})
- : super(cmdName, 'Compile Dart to JavaScript.', verbose) {
- argParser
- ..addOption(
- commonOptions['outputFile'].flag,
- help: commonOptions['outputFile'].help,
- abbr: commonOptions['outputFile'].abbr,
- defaultsTo: commonOptions['outputFile'].defaultsTo,
- )
- ..addOption(
- commonOptions['verbosity'].flag,
- help: commonOptions['verbosity'].help,
- abbr: commonOptions['verbosity'].abbr,
- defaultsTo: commonOptions['verbosity'].defaultsTo,
- allowed: commonOptions['verbosity'].allowed,
- allowedHelp: commonOptions['verbosity'].allowedHelp,
- )
- ..addFlag(
- 'minified',
- help: 'Generate minified output.',
- abbr: 'm',
- negatable: false,
- )
- ..addMultiOption('define', abbr: 'D', valueHelp: 'key=value', help: '''
-Define an environment declaration. To specify multiple declarations, use multiple options or use commas to separate key-value pairs.
-For example: dart compile $cmdName -Da=1,b=2 main.dart''');
+ /// Accept all flags so we can delegate arg parsing to dart2js internally.
+ @override
+ final ArgParser argParser = ArgParser.allowAnything();
- addExperimentalFlags(argParser, verbose);
- }
+ CompileJSCommand({bool verbose})
+ : super(cmdName, 'Compile Dart to JavaScript.', verbose);
@override
String get invocation => '${super.invocation} <dart entry point>';
@override
FutureOr<int> run() async {
- if (!Sdk.checkArtifactExists(sdk.dart2jsSnapshot)) {
- return 255;
- }
- final String librariesPath = path.absolute(
- sdk.sdkPath,
- 'lib',
- 'libraries.json',
- );
+ if (!Sdk.checkArtifactExists(sdk.dart2jsSnapshot)) return 255;
- if (!Sdk.checkArtifactExists(librariesPath)) {
- return 255;
- }
+ final librariesPath = path.absolute(sdk.sdkPath, 'lib', 'libraries.json');
- // We expect a single rest argument; the dart entry point.
- if (argResults.rest.length != 1) {
- // This throws.
- usageException('Missing Dart entry point.');
- }
-
- final String sourcePath = argResults.rest[0];
- if (!checkFile(sourcePath)) {
- return 1;
- }
- final args = <String>[
- '--libraries-spec=$librariesPath',
- if (argResults.enabledExperiments.isNotEmpty)
- "--enable-experiment=${argResults.enabledExperiments.join(',')}",
- if (argResults.wasParsed(commonOptions['outputFile'].flag))
- "-o${argResults[commonOptions['outputFile'].flag]}",
- if (argResults.wasParsed('minified')) '-m',
- ];
-
- if (argResults.wasParsed('define')) {
- for (final define in argResults['define']) {
- args.add('-D$define');
- }
- }
-
- // Add any args that weren't parsed to the end. This will likely only ever
- // be the script name.
- args.addAll(argResults.rest);
+ if (!Sdk.checkArtifactExists(librariesPath)) return 255;
VmInteropHandler.run(
sdk.dart2jsSnapshot,
[
'--libraries-spec=$librariesPath',
- if (argResults.enabledExperiments.isNotEmpty)
- "--enable-experiment=${argResults.enabledExperiments.join(',')}",
'--cfe-invocation-modes=compile',
...argResults.arguments,
],
@@ -357,9 +297,7 @@
static const String cmdName = 'compile';
CompileCommand({bool verbose = false})
: super(cmdName, 'Compile Dart to various formats.', verbose) {
- addSubcommand(CompileJSCommand(
- verbose: verbose,
- ));
+ addSubcommand(CompileJSCommand(verbose: verbose));
addSubcommand(CompileSnapshotCommand(
commandName: CompileSnapshotCommand.jitSnapshotCmdName,
help: 'to a JIT snapshot.',