@@ -26,14 +26,15 @@ void main(List<String> args) async {
2626 ..addCommand ('buildbot' )
2727 ..addCommand ('clean' )
2828 ..addCommand ('compare' )
29+ ..addCommand ('help' )
2930 ..addCommand ('test' )
3031 ..addCommand ('try-publish' )
3132 ..addCommand ('validate' );
32- parser.addCommand ('doc' )
33- ..addOption ('name' )
34- ..addOption ('version' )
35- ..addFlag ('stats' );
36- parser.addCommand ('serve' )
33+ var docCommand = parser.addCommand ('doc' )
34+ ..addOption ('name' , help : 'package name' )
35+ ..addOption ('version' , help : 'package version' )
36+ ..addFlag ('stats' , help : 'print runtime stats' );
37+ var serveCommand = parser.addCommand ('serve' )
3738 ..addOption ('name' )
3839 ..addOption ('version' );
3940
@@ -43,13 +44,17 @@ void main(List<String> args) async {
4344 return ;
4445 }
4546
47+ docUsage = docCommand.usage;
48+ serveUsage = serveCommand.usage;
49+
4650 return await switch (commandResults.name) {
4751 'analyze' => runAnalyze (commandResults),
4852 'build' => runBuild (commandResults),
4953 'buildbot' => runBuildbot (),
5054 'clean' => runClean (),
5155 'compare' => runCompare (commandResults),
5256 'doc' => runDoc (commandResults),
57+ 'help' => runHelp (commandResults),
5358 'serve' => runServe (commandResults),
5459 'test' => runTest (),
5560 'try-publish' => runTryPublish (),
@@ -58,6 +63,9 @@ void main(List<String> args) async {
5863 };
5964}
6065
66+ late String docUsage;
67+ late String serveUsage;
68+
6169String _getPackageVersion () {
6270 var pubspec = File ('pubspec.yaml' );
6371 if (! pubspec.existsSync ()) {
@@ -288,6 +296,7 @@ Future<void> runDoc(ArgResults commandResults) async {
288296 var stats = commandResults['stats' ];
289297 await switch (target) {
290298 'flutter' => docFlutter (withStats: stats),
299+ 'help' => _docHelp (),
291300 'package' => _docPackage (commandResults, withStats: stats),
292301 'sdk' => docSdk (),
293302 'testing-package' => docTestingPackage (),
@@ -360,6 +369,14 @@ Future<Iterable<Map<String, Object?>>> _docFlutter({
360369final Directory flutterDir =
361370 Directory .systemTemp.createTempSync ('flutter' ).absolute;
362371
372+ Future <void > _docHelp () async {
373+ print ('''
374+ Usage:
375+ dart tool/task.dart doc [flutter|package|sdk|testing-package]
376+ $docUsage
377+ ''' );
378+ }
379+
363380Future <void > _docPackage (
364381 ArgResults commandResults, {
365382 bool withStats = false ,
@@ -577,13 +594,38 @@ String get _dartdocOriginalBranch {
577594 return branch;
578595}
579596
597+ Future <void > runHelp (ArgResults commandResults) async {
598+ if (commandResults.rest.isEmpty) {
599+ // TODO(srawlins): Add more help for more individual commands.
600+ print ('''
601+ Usage:
602+ dart tool/task.dart [analyze|build|buildbot|clean|compare|doc|help|serve|test|tryp-publish|validate] options...
603+
604+ Help usage:
605+ dart tool/task.dart help [doc|serve]
606+ ''' );
607+ return ;
608+ }
609+ if (commandResults.rest.length != 1 ) {
610+ throw ArgumentError ('"help" command requires a single command name.' );
611+ }
612+ var command = commandResults.rest.single;
613+ return switch (command) {
614+ 'doc' => _docHelp (),
615+ 'serve' => _serveHelp (),
616+ _ => throw UnimplementedError (
617+ 'Unknown command: "$command ", or no specific help text' ),
618+ };
619+ }
620+
580621Future <void > runServe (ArgResults commandResults) async {
581622 if (commandResults.rest.length != 1 ) {
582623 throw ArgumentError ('"serve" command requires a single target.' );
583624 }
584625 var target = commandResults.rest.single;
585626 await switch (target) {
586627 'flutter' => serveFlutterDocs (),
628+ 'help' => _serveHelp (),
587629 'package' => _servePackageDocs (commandResults),
588630 'sdk' => serveSdkDocs (),
589631 'testing-package' => serveTestingPackageDocs (),
@@ -608,6 +650,14 @@ Future<void> serveFlutterDocs() async {
608650 ]);
609651}
610652
653+ Future <void > _serveHelp () async {
654+ print ('''
655+ Usage:
656+ dart tool/task.dart serve [flutter|package|sdk|testing-package]
657+ $docUsage
658+ ''' );
659+ }
660+
611661Future <void > _servePackageDocs (ArgResults commandResults) async {
612662 var name = commandResults['name' ] as String ;
613663 var version = commandResults['version' ] as String ? ;
0 commit comments