run method
Runs the CLI with the given arguments.
Returns the exit code.
Implementation
ExitCode run(List<String> arguments) {
// Fast path: no arguments means no files specified
if (arguments.isEmpty) {
stderr.writeln(_noFilesError);
_printUsage('');
return ExitCode.error;
}
final parser = _buildArgParser();
try {
final results = parser.parse(arguments);
if (results['help'] as bool) {
_printUsage(parser.usage);
return ExitCode.success;
}
final paths = results.rest;
if (paths.isEmpty) {
stderr.writeln(_noFilesError);
_printUsage(parser.usage);
return ExitCode.error;
}
final outputMode = OutputMode.fromString(results['output'] as String);
final setExitIfChanged = results['set-exit-if-changed'] as bool;
final options = _resolveOptions(results);
final stopwatch = Stopwatch()..start();
final result = _processPaths(paths, outputMode, options);
stopwatch.stop();
if (outputMode == OutputMode.write) {
final elapsed = stopwatch.elapsed.inMilliseconds / 1000.0;
final timeStr = elapsed.toStringAsFixed(2);
final sentence = result.changedFiles == 0
? 'Formatted ${result.totalFiles} files'
: 'Formatted ${result.totalFiles} files (${result.changedFiles} changed)';
stdout.writeln('$sentence in $timeStr seconds.');
}
if (result.status == ProcessResult.error) {
return ExitCode.error;
}
if (setExitIfChanged && result.status == ProcessResult.changed) {
return ExitCode.changed;
}
return ExitCode.success;
} on FormatException catch (e) {
stderr.writeln('Error: ${e.message}');
_printUsage(parser.usage);
return ExitCode.error;
}
}