run method

  1. @override
FutureOr<int?> run([
  1. DevToolExecutionContext? context
])
override

Runs this tool and returns (either synchronously or asynchronously) an int which will be treated as the exit code (i.e. non-zero means failure).

context is optional. If calling this directly from a dart script, you will most likely want to omit this. DevTools that are converted to a DevToolCommand via toCommand for use in a command-line application will provide a fully-populated DevToolExecutionContext here.

This is the one API member that subclasses need to implement.

Implementation

@override
FutureOr<int?> run([DevToolExecutionContext? context]) async {
  context ??= DevToolExecutionContext();

  int? code = 0;
  for (var i = 0; i < _specs.length; i++) {
    if (!shouldRunTool(_specs[i].when, code)) continue;
    final newCode =
        await _specs[i].tool.run(contextForTool(context, _specs[i]));
    _log.fine('Step ${i + 1}/${_specs.length} done (code: $newCode)\n');
    if (code == 0) {
      code = newCode;
    }
  }

  return code;
}