From 2273611355b3ba8a689c6e5360ac771f9ffcb243 Mon Sep 17 00:00:00 2001 From: Daco Harkes Date: Wed, 25 Jun 2025 03:08:50 -0700 Subject: [PATCH] [dartdev] Organize `dart --help` commands into categories This CL organizes the commands in the Dart CLI to categories. It mirrors the categories used in `flutter --help`: `SDK`, `Project`, and `Tools`. The available command section will now look as follows in verbose mode: ``` Available commands: Project build Build a Dart application including native assets. compile Compile Dart to various formats. create Create a new Dart project. pub Work with packages. run Run a Dart program. test Run tests for a project. Source code analyze Analyze Dart code in a directory. doc Generate API documentation for Dart projects. fix Apply automated fixes to Dart source code. format Idiomatically format Dart source code. Tools compilation-server Control resident frontend compilers. development-service Start Dart's development service. devtools Open DevTools (optionally connecting to an existing application). info Show diagnostic information about the installed tooling. language-server Start Dart's analysis server. tooling-daemon Start Dart's tooling daemon. ``` Bug: https://github.com/dart-lang/sdk/issues/60980 Change-Id: Ic9da297fcdd0f8e85d619632ba8ec30fd2c32666 Cq-Include-Trybots: luci.dart.try:pkg-linux-debug-try,pkg-linux-release-arm64-try,pkg-linux-release-try,pkg-mac-release-arm64-try,pkg-mac-release-try,pkg-win-release-arm64-try,pkg-win-release-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/436382 Reviewed-by: Michael Thomsen Commit-Queue: Daco Harkes --- pkg/dartdev/lib/dartdev.dart | 4 ++-- pkg/dartdev/lib/src/commands/analyze.dart | 3 +++ pkg/dartdev/lib/src/commands/build.dart | 3 +++ pkg/dartdev/lib/src/commands/compilation_server.dart | 3 +++ pkg/dartdev/lib/src/commands/compile.dart | 3 +++ pkg/dartdev/lib/src/commands/create.dart | 3 +++ pkg/dartdev/lib/src/commands/dart_mcp_server.dart | 3 +++ pkg/dartdev/lib/src/commands/debug_adapter.dart | 3 +++ pkg/dartdev/lib/src/commands/development_service.dart | 10 ++++++---- pkg/dartdev/lib/src/commands/devtools.dart | 3 +++ pkg/dartdev/lib/src/commands/doc.dart | 3 +++ pkg/dartdev/lib/src/commands/fix.dart | 3 +++ pkg/dartdev/lib/src/commands/info.dart | 3 +++ pkg/dartdev/lib/src/commands/language_server.dart | 3 +++ pkg/dartdev/lib/src/commands/run.dart | 3 +++ pkg/dartdev/lib/src/commands/test.dart | 3 +++ pkg/dartdev/lib/src/commands/tooling_daemon.dart | 5 ++++- 17 files changed, 54 insertions(+), 7 deletions(-) diff --git a/pkg/dartdev/lib/dartdev.dart b/pkg/dartdev/lib/dartdev.dart index b3fb052fd35..2c5e0a92044 100644 --- a/pkg/dartdev/lib/dartdev.dart +++ b/pkg/dartdev/lib/dartdev.dart @@ -116,11 +116,11 @@ class DartdevRunner extends CommandRunner { addCommand(DevToolsCommand(verbose: verbose)); addCommand(DocCommand(verbose: verbose)); addCommand(FixCommand(verbose: verbose)); - addCommand(FormatCommand(verbose: verbose)); + addCommand(FormatCommand(verbose: verbose, category: 'Source code')); addCommand(InfoCommand(verbose: verbose)); addCommand(LanguageServerCommand(verbose: verbose)); addCommand(DartMCPServerCommand(verbose: verbose)); - addCommand(pubCommand(isVerbose: () => verbose)); + addCommand(pubCommand(isVerbose: () => verbose, category: 'Project')); addCommand(RunCommand( verbose: verbose, nativeAssetsExperimentEnabled: nativeAssetsExperimentEnabled, diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart index b10d9aabb43..02ef860ad0a 100644 --- a/pkg/dartdev/lib/src/commands/analyze.dart +++ b/pkg/dartdev/lib/src/commands/analyze.dart @@ -99,6 +99,9 @@ class AnalyzeCommand extends DartdevCommand { ..addExperimentalFlags(); } + @override + String get category => 'Source code'; + @override String get invocation => '${super.invocation} []'; diff --git a/pkg/dartdev/lib/src/commands/build.dart b/pkg/dartdev/lib/src/commands/build.dart index 04464d126d6..38346e81e9d 100644 --- a/pkg/dartdev/lib/src/commands/build.dart +++ b/pkg/dartdev/lib/src/commands/build.dart @@ -34,6 +34,9 @@ class BuildCommand extends DartdevCommand { recordUseEnabled: recordUseEnabled, )); } + + @override + String get category => 'Project'; } /// Subcommand for `dart build cli`. diff --git a/pkg/dartdev/lib/src/commands/compilation_server.dart b/pkg/dartdev/lib/src/commands/compilation_server.dart index 5fd40d21a69..30740ede776 100644 --- a/pkg/dartdev/lib/src/commands/compilation_server.dart +++ b/pkg/dartdev/lib/src/commands/compilation_server.dart @@ -42,6 +42,9 @@ class CompilationServerCommand extends DartdevCommand { addSubcommand(CompilationServerStartCommand()); addSubcommand(CompilationServerShutdownCommand()); } + + @override + String get category => 'Tools'; } class CompilationServerStartCommand extends DartdevCommand { diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart index 07810e9ff89..65166dc6a56 100644 --- a/pkg/dartdev/lib/src/commands/compile.dart +++ b/pkg/dartdev/lib/src/commands/compile.dart @@ -1145,4 +1145,7 @@ class CompileCommand extends DartdevCommand { )); addSubcommand(CompileWasmCommand(verbose: verbose)); } + + @override + String get category => 'Project'; } diff --git a/pkg/dartdev/lib/src/commands/create.dart b/pkg/dartdev/lib/src/commands/create.dart index d108c7b2247..cf1f7a53e57 100644 --- a/pkg/dartdev/lib/src/commands/create.dart +++ b/pkg/dartdev/lib/src/commands/create.dart @@ -61,6 +61,9 @@ class CreateCommand extends DartdevCommand { @override String get invocation => '${super.invocation} '; + @override + String get category => 'Project'; + @override FutureOr run() async { final args = argResults!; diff --git a/pkg/dartdev/lib/src/commands/dart_mcp_server.dart b/pkg/dartdev/lib/src/commands/dart_mcp_server.dart index dc453c039a1..179d8cab223 100644 --- a/pkg/dartdev/lib/src/commands/dart_mcp_server.dart +++ b/pkg/dartdev/lib/src/commands/dart_mcp_server.dart @@ -39,6 +39,9 @@ EXPERIMENTAL: This tool may change dramatically or disappear at any time.'''; 'experimental feature with no stability guarantees.'); } + @override + String get category => 'Tools'; + @override Future run() async { final args = argResults!; diff --git a/pkg/dartdev/lib/src/commands/debug_adapter.dart b/pkg/dartdev/lib/src/commands/debug_adapter.dart index b8855387e5a..9e049c0436b 100644 --- a/pkg/dartdev/lib/src/commands/debug_adapter.dart +++ b/pkg/dartdev/lib/src/commands/debug_adapter.dart @@ -59,6 +59,9 @@ class DebugAdapterCommand extends DartdevCommand { ); } + @override + String get category => 'Tools'; + @override FutureOr run() async { final args = argResults!; diff --git a/pkg/dartdev/lib/src/commands/development_service.dart b/pkg/dartdev/lib/src/commands/development_service.dart index 0948c95215b..a3251788884 100644 --- a/pkg/dartdev/lib/src/commands/development_service.dart +++ b/pkg/dartdev/lib/src/commands/development_service.dart @@ -30,6 +30,9 @@ class DevelopmentServiceCommand extends DartdevCommand { ); } + @override + String get category => 'Tools'; + @override Future run() async { final sdkDir = dirname(sdk.dart); @@ -47,12 +50,11 @@ class DevelopmentServiceCommand extends DartdevCommand { // On ia32 platforms we do not have an AOT snapshot and so we need // to run the JIT snapshot. useExecProcess = false; - script = fullSdk - ? sdk.ddsSnapshot - : absolute(sdkDir, 'dds.dart.snapshot'); + script = + fullSdk ? sdk.ddsSnapshot : absolute(sdkDir, 'dds.dart.snapshot'); if (!Sdk.checkArtifactExists(script, logError: false)) { log.stderr('Error: launching development server failed : ' - 'Unable to find snapshot for the development server'); + 'Unable to find snapshot for the development server'); return 255; } } diff --git a/pkg/dartdev/lib/src/commands/devtools.dart b/pkg/dartdev/lib/src/commands/devtools.dart index 4841a15d88b..08eb3c4404c 100644 --- a/pkg/dartdev/lib/src/commands/devtools.dart +++ b/pkg/dartdev/lib/src/commands/devtools.dart @@ -39,6 +39,9 @@ class DevToolsCommand extends DartdevCommand { @override String get name => 'devtools'; + @override + String get category => 'Tools'; + @override String get description => DevToolsServer.commandDescription; diff --git a/pkg/dartdev/lib/src/commands/doc.dart b/pkg/dartdev/lib/src/commands/doc.dart index 81c44f269f5..00e095389cb 100644 --- a/pkg/dartdev/lib/src/commands/doc.dart +++ b/pkg/dartdev/lib/src/commands/doc.dart @@ -55,6 +55,9 @@ For additional documentation generation options, see the 'dartdoc_options.yaml' ); } + @override + String get category => 'Source code'; + @override String get invocation => '${super.invocation} []'; diff --git a/pkg/dartdev/lib/src/commands/fix.dart b/pkg/dartdev/lib/src/commands/fix.dart index dc8901f2f67..b872a635140 100644 --- a/pkg/dartdev/lib/src/commands/fix.dart +++ b/pkg/dartdev/lib/src/commands/fix.dart @@ -70,6 +70,9 @@ To use the tool, run either ['dart fix --dry-run'] for a preview of the proposed ..addExperimentalFlags(verbose: verbose); } + @override + String get category => 'Source code'; + @override String get description { if (log.ansi.useAnsi) { diff --git a/pkg/dartdev/lib/src/commands/info.dart b/pkg/dartdev/lib/src/commands/info.dart index 477cf8849c6..0ce4ba4e040 100644 --- a/pkg/dartdev/lib/src/commands/info.dart +++ b/pkg/dartdev/lib/src/commands/info.dart @@ -18,6 +18,9 @@ class InfoCommand extends DartdevCommand { static const String cmdDescription = 'Show diagnostic information about the installed tooling.'; + @override + String get category => 'Tools'; + InfoCommand({bool verbose = false}) : super(cmdName, cmdDescription, verbose) { argParser.addFlag( diff --git a/pkg/dartdev/lib/src/commands/language_server.dart b/pkg/dartdev/lib/src/commands/language_server.dart index 40a9b2b1683..cb8108dbb78 100644 --- a/pkg/dartdev/lib/src/commands/language_server.dart +++ b/pkg/dartdev/lib/src/commands/language_server.dart @@ -15,6 +15,9 @@ import '../vm_interop_handler.dart'; class LanguageServerCommand extends DartdevCommand { static const String commandName = 'language-server'; + @override + String get category => 'Tools'; + static const String commandDescription = ''' Start Dart's analysis server. diff --git a/pkg/dartdev/lib/src/commands/run.dart b/pkg/dartdev/lib/src/commands/run.dart index cddf60e7bad..14e674ae60a 100644 --- a/pkg/dartdev/lib/src/commands/run.dart +++ b/pkg/dartdev/lib/src/commands/run.dart @@ -312,6 +312,9 @@ class RunCommand extends DartdevCommand { String get invocation => '${super.invocation} [ [args]]'; + @override + String get category => 'Project'; + /// Attempts to compile [executable] to a kernel file using the Resident /// Frontend Compiler associated with [residentCompilerInfoFile]. If /// [shouldRetryOnFrontendCompilerException] is true, when a diff --git a/pkg/dartdev/lib/src/commands/test.dart b/pkg/dartdev/lib/src/commands/test.dart index f3890da151d..0891a1f708d 100644 --- a/pkg/dartdev/lib/src/commands/test.dart +++ b/pkg/dartdev/lib/src/commands/test.dart @@ -32,6 +32,9 @@ class TestCommand extends DartdevCommand { return ArgParser.allowAnything(); } + @override + String get category => 'Project'; + @override void printUsage() { print('''Usage: dart test [arguments] diff --git a/pkg/dartdev/lib/src/commands/tooling_daemon.dart b/pkg/dartdev/lib/src/commands/tooling_daemon.dart index ea367d64802..75a80a41e1f 100644 --- a/pkg/dartdev/lib/src/commands/tooling_daemon.dart +++ b/pkg/dartdev/lib/src/commands/tooling_daemon.dart @@ -28,6 +28,9 @@ class ToolingDaemonCommand extends DartdevCommand { ); } + @override + String get category => 'Tools'; + @override Future run() async { var script = sdk.dartAotRuntime; @@ -51,7 +54,7 @@ class ToolingDaemonCommand extends DartdevCommand { script, dtdCommand, packageConfigOverride: null, - useExecProcess : useExecProcess, + useExecProcess: useExecProcess, ); return 0; } catch (e, st) {