| // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import '../command_runner.dart'; |
| |
| /// The built-in help command that's added to every [CommandRunner]. |
| /// |
| /// This command displays help information for the various subcommands. |
| class HelpCommand<T> extends Command<T> { |
| final name = "help"; |
| String get description => |
| "Display help information for ${runner.executableName}."; |
| String get invocation => "${runner.executableName} help [command]"; |
| |
| T run() { |
| // Show the default help if no command was specified. |
| if (argResults.rest.isEmpty) { |
| runner.printUsage(); |
| return null; |
| } |
| |
| // Walk the command tree to show help for the selected command or |
| // subcommand. |
| var commands = runner.commands; |
| Command command; |
| var commandString = runner.executableName; |
| |
| for (var name in argResults.rest) { |
| if (commands.isEmpty) { |
| command.usageException( |
| 'Command "$commandString" does not expect a subcommand.'); |
| } |
| |
| if (commands[name] == null) { |
| if (command == null) { |
| runner.usageException('Could not find a command named "$name".'); |
| } |
| |
| command.usageException( |
| 'Could not find a subcommand named "$name" for "$commandString".'); |
| } |
| |
| command = commands[name]; |
| commands = command.subcommands; |
| commandString += " $name"; |
| } |
| |
| command.printUsage(); |
| return null; |
| } |
| } |