run method

  1. @override
Future<void> run(
  1. Iterable<String> args
)
inherited

Parses args and invokes Command.run on the chosen command.

This always returns a Future in case the command is asynchronous. The Future will throw a UsageException if args was invalid.

This overrides the CommandRunner.run method in order to resolve the global configuration before invoking runCommand. If this method is overridden, the overriding method must ensure that the global configuration is set, see globalConfiguration.

Implementation

@override
Future<T?> run(final Iterable<String> args) {
  return Future.sync(() {
    final argResults = parse(args);
    globalConfiguration = resolveConfiguration(argResults);

    try {
      if (globalConfiguration.errors.isNotEmpty) {
        final buffer = StringBuffer();
        final errors = globalConfiguration.errors.map(formatConfigError);
        buffer.writeAll(errors, '\n');
        usageException(buffer.toString());
      }
    } on UsageException catch (e) {
      messageOutput?.logUsageException(e);
      _onAnalyticsEvent?.call(BetterCommandRunnerAnalyticsEvents.invalid);
      rethrow;
    }

    return runCommand(argResults);
  });
}