| // 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> { |
| @override |
| final name = 'help'; |
| |
| @override |
| String get description => |
| 'Display help information for ${runner.executableName}.'; |
| |
| @override |
| String get invocation => '${runner.executableName} help [command]'; |
| |
| @override |
| bool get hidden => true; |
| |
| @override |
| 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; |
| } |
| } |