run method
Implementation
Future<int> run(List<String> arguments) async {
if (arguments.isEmpty) {
_printOverview();
return ExitCode.success;
}
final first = arguments.first;
if (_isVersion(first)) {
Console.line(
'${Console.bold('Vania CLI')} ${Console.green(Constants.cliVersion)}',
);
return ExitCode.success;
}
if (first == 'help' || _isHelp(first)) {
return _printHelp(arguments.length > 1 ? arguments[1] : null);
}
final name = first.toLowerCase();
final command = _commands[name];
if (command == null) {
Console.error('Unknown command: $name');
final suggestion = _closestMatch(name);
if (suggestion != null) {
Console.line('Did you mean ${Console.cyan(suggestion)}?');
}
return ExitCode.usage;
}
final commandArguments = arguments.sublist(1);
if (commandArguments.any(_isHelp)) {
command.printUsage();
return ExitCode.success;
}
command.workingDirectory = _root;
if (command.requiresProject &&
!Directory('${_root.path}/lib').existsSync()) {
Console.error('Run this command from a Vania project root.');
return ExitCode.noInput;
}
try {
return await command.execute(commandArguments);
} catch (error, stackTrace) {
Console.error('$name failed: $error');
if (Platform.environment['VANIA_CLI_DEBUG'] == '1') {
Console.line(Console.dim(stackTrace.toString()));
}
return ExitCode.failure;
}
}