diff --git a/pkg/dartdev/lib/src/commands/devtools.dart b/pkg/dartdev/lib/src/commands/devtools.dart index ecf788423a4..194836ef003 100644 --- a/pkg/dartdev/lib/src/commands/devtools.dart +++ b/pkg/dartdev/lib/src/commands/devtools.dart @@ -4,7 +4,6 @@ import 'package:args/args.dart'; import 'package:dds/devtools_server.dart'; -import 'package:dds/src/devtools/utils.dart'; import 'package:path/path.dart' as path; import '../core.dart'; @@ -15,7 +14,7 @@ class DevToolsCommand extends DartdevCommand { DevToolsCommand({ this.customDevToolsPath, bool verbose = false, - }) : _argParser = DevToolsServer.buildArgParser( + }) : argParser = DevToolsServer.buildArgParser( verbose: verbose, includeHelpOption: false, usageLineLength: dartdevUsageLineLength, @@ -29,8 +28,7 @@ class DevToolsCommand extends DartdevCommand { final String? customDevToolsPath; @override - ArgParser get argParser => _argParser; - late final ArgParser _argParser; + final ArgParser argParser; @override String get name => 'devtools'; @@ -44,87 +42,16 @@ class DevToolsCommand extends DartdevCommand { @override Future run() async { final args = argResults!; - final bool version = args[DevToolsServer.argVersion]; - final bool machineMode = args[DevToolsServer.argMachine]; - // launchBrowser defaults based on machine-mode if not explicitly supplied. - final bool launchBrowser = args.wasParsed(DevToolsServer.argLaunchBrowser) - ? args[DevToolsServer.argLaunchBrowser] - : !machineMode; - final bool enableNotifications = - args[DevToolsServer.argEnableNotifications]; - final bool allowEmbedding = args.wasParsed(DevToolsServer.argAllowEmbedding) - ? args[DevToolsServer.argAllowEmbedding] - : true; - - final port = args[DevToolsServer.argPort] != null - ? int.tryParse(args[DevToolsServer.argPort]) ?? 0 - : 0; - - final bool headlessMode = args[DevToolsServer.argHeadlessMode]; - final bool debugMode = args[DevToolsServer.argDebugMode]; - - final numPortsToTry = args[DevToolsServer.argTryPorts] != null - ? int.tryParse(args[DevToolsServer.argTryPorts]) ?? 0 - : DevToolsServer.defaultTryPorts; - - final bool verboseMode = args[DevToolsServer.argVerbose]; - final String? hostname = args[DevToolsServer.argHost]; - final String? appSizeBase = args[DevToolsServer.argAppSizeBase]; - final String? appSizeTest = args[DevToolsServer.argAppSizeTest]; final sdkDir = path.dirname(sdk.dart); final fullSdk = sdkDir.endsWith('bin'); final devToolsBinaries = fullSdk ? sdk.devToolsBinaries : path.absolute(sdkDir, 'devtools'); - if (version) { - final versionStr = await DevToolsUtils.getVersion(devToolsBinaries); - DevToolsUtils.printOutput( - 'Dart DevTools version $versionStr', - { - 'version': versionStr, - }, - machineMode: machineMode, - ); - return 0; - } - - // Prefer getting the VM URI from the rest args; fall back on the 'vm-url' - // option otherwise. - String? serviceProtocolUri; - if (args.rest.isNotEmpty) { - serviceProtocolUri = args.rest.first; - } else if (args.wasParsed(DevToolsServer.argVmUri)) { - serviceProtocolUri = args[DevToolsServer.argVmUri]; - } - - // Support collecting profile data. - String? profileFilename; - if (args.wasParsed(DevToolsServer.argProfileMemory)) { - profileFilename = args[DevToolsServer.argProfileMemory]; - } - if (profileFilename != null && !path.isAbsolute(profileFilename)) { - profileFilename = path.absolute(profileFilename); - } - - final server = await DevToolsServer().serveDevTools( - machineMode: machineMode, - debugMode: debugMode, - launchBrowser: launchBrowser, - enableNotifications: enableNotifications, - allowEmbedding: allowEmbedding, - port: port, - headlessMode: headlessMode, - numPortsToTry: numPortsToTry, - customDevToolsPath: customDevToolsPath ?? devToolsBinaries, - serviceProtocolUri: serviceProtocolUri, - profileFilename: profileFilename, - verboseMode: verboseMode, - hostname: hostname, - appSizeBase: appSizeBase, - appSizeTest: appSizeTest, + final server = await DevToolsServer().serveDevToolsWithArgs( + args.arguments, + customDevToolsPath: devToolsBinaries, ); - return server == null ? -1 : 0; } } diff --git a/pkg/dds/tool/devtools_server/serve_local.dart b/pkg/dds/tool/devtools_server/serve_local.dart index db893fe4246..86ac23ab15a 100644 --- a/pkg/dds/tool/devtools_server/serve_local.dart +++ b/pkg/dds/tool/devtools_server/serve_local.dart @@ -10,7 +10,7 @@ import 'package:dds/devtools_server.dart'; const argDevToolsBuild = 'devtools-build'; void main(List args) { - final argParser = ArgParser() + final argParser = DevToolsServer.buildArgParser() ..addOption( argDevToolsBuild, help: 'The location of the DevTools build to serve from DevTools server ' @@ -21,7 +21,8 @@ void main(List args) { try { final ArgResults argResults = argParser.parse(args); unawaited( - DevToolsServer().serveDevTools( + DevToolsServer().serveDevToolsWithArgs( + _removeDevToolsBuildOption(args), customDevToolsPath: argResults[argDevToolsBuild], ), ); @@ -31,3 +32,23 @@ void main(List args) { print(argParser.usage); } } + +/// Removes the --devtools-build option from [args]. +List _removeDevToolsBuildOption(List args) { + // Create a new list to mutate as the args list is fixed. + args = args.toList(); + + final option = '--$argDevToolsBuild'; + + // serve_local.dart --devtools-build foo + final index = args.indexOf(option); + if (index != -1) { + args.removeRange(index, index + 2); + } + + // serve_local.dart --devtools-build=foo + // serve_local.dart --devtools-build="foo" + args.removeWhere((arg) => arg.startsWith('${option}=')); + + return args; +}