in lib/command_runner.dart [452:498]
String _getCommandUsage(Map<String, Command> commands,
{bool isSubcommand = false, int? lineLength}) {
// Don't include aliases.
var names =
commands.keys.where((name) => !commands[name]!.aliases.contains(name));
// Filter out hidden ones, unless they are all hidden.
var visible = names.where((name) => !commands[name]!.hidden);
if (visible.isNotEmpty) names = visible;
// Show the commands alphabetically.
names = names.toList()..sort();
// Group the commands by category.
var commandsByCategory = SplayTreeMap<String, List<Command>>();
for (var name in names) {
var category = commands[name]!.category;
commandsByCategory.putIfAbsent(category, () => []).add(commands[name]!);
}
final categories = commandsByCategory.keys.toList();
var length = names.map((name) => name.length).reduce(math.max);
var buffer = StringBuffer('Available ${isSubcommand ? "sub" : ""}commands:');
var columnStart = length + 5;
for (var category in categories) {
if (category != '') {
buffer.writeln();
buffer.writeln();
buffer.write(category);
}
for (var command in commandsByCategory[category]!) {
var lines = wrapTextAsLines(command.summary,
start: columnStart, length: lineLength);
buffer.writeln();
buffer.write(' ${padRight(command.name, length)} ${lines.first}');
for (var line in lines.skip(1)) {
buffer.writeln();
buffer.write(' ' * columnStart);
buffer.write(line);
}
}
}
return buffer.toString();
}