completion 1.0.0 completion: ^1.0.0 copied to clipboard
A package to add shell command completion to your Dart application
#!/usr/bin/env dart
import 'dart:io';
import 'package:args/args.dart';
import 'package:completion/completion.dart';
import '../test/completion_tests_args.dart';
void main(List<String> args) {
final argParser = getHelloSampleParser();
ArgResults argResult;
try {
argResult = tryArgsCompletion(
args,
argParser,
// logFile: '_completion.log',
);
} on FormatException catch (ex) {
// TODO: print color?
print(ex.message);
print(argParser.usage);
/// 64 - C/C++ standard for bad usage.
exitCode = 64;
return;
}
if (argResult.command != null) {
final subCommand = argResult.command!;
final subCommandParser = argParser.commands[subCommand.name]!;
if (subCommand.name == 'help') {
// so the help command was run.
// there are args here, too. Super fun.
if (subCommand.command != null) {
// we have a sub-sub command. Fun!
// let's get the sub-sub command parser
final subSubCommand = subCommand.command!;
if (subSubCommand.name == 'assistance') {
print('Yes, we have help for help...just calling it assistance');
// let's print sub help. Very crazy.
print(subCommandParser.usage);
return;
} else {
throw StateError(
'no clue what that subCammand is: ${subSubCommand.name}');
}
}
// one sub-sub command: help. Really.
var usage = argParser.usage;
if (subCommand['yell'] as bool) {
usage = usage.toUpperCase();
print("I'm yelling, so the case of the available commands will be off");
}
print(usage);
return;
}
}
final name = argResult.rest.isEmpty ? 'World' : argResult.rest.first;
final greeting = argResult['friendly'] as bool ? 'Hiya' : 'Hello';
final salutationVal = argResult['salutation'] as String?;
final salutation = salutationVal == null ? '' : '$salutationVal ';
var message = '$greeting, $salutation$name';
if (argResult['loud'] as bool) {
message = message.toUpperCase();
}
print(message);
}