blob: cf68c3f9adb87605728ce4581dced3576b56dac8 [file] [log] [blame]
// 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
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;
}
}