@@ -2,10 +2,12 @@ import 'dart:io';
22
33import 'package:args/command_runner.dart' ;
44
5+ import '../version.dart' ;
56import 'commands/analyze_command.dart' ;
67import 'commands/check_unused_code_command.dart' ;
78import 'commands/check_unused_files_command.dart' ;
89import 'commands/check_unused_l10n_command.dart' ;
10+ import 'models/flag_names.dart' ;
911
1012/// Represents a cli runner responsible
1113/// for running a command based on raw cli call data.
@@ -17,12 +19,15 @@ class CliRunner extends CommandRunner<void> {
1719 CheckUnusedCodeCommand (),
1820 ];
1921
20- CliRunner ()
21- : super (
22- 'metrics' ,
23- 'Analyze and improve your code quality.' ,
24- ) {
22+ late final IOSink _output;
23+
24+ CliRunner ([IOSink ? output])
25+ : super ('metrics' , 'Analyze and improve your code quality.' ) {
26+ _output = output ?? stdout;
27+
2528 _commands.forEach (addCommand);
29+
30+ _usesVersionOption ();
2631 }
2732
2833 /// Represents the invocation string message
@@ -32,14 +37,26 @@ class CliRunner extends CommandRunner<void> {
3237 /// Main entry point for running a command
3338 @override
3439 Future <void > run (Iterable <String > args) async {
40+ final results = parse (args);
41+ final showVersion = results[FlagNames .version] as bool ;
42+
43+ if (showVersion) {
44+ _output.writeln ('Dart Code Metrics version: $packageVersion ' );
45+
46+ return ;
47+ }
48+
3549 try {
3650 await super .run (_addDefaultCommand (args));
3751 } on UsageException catch (e) {
38- print ('${e .message }\n ' );
39- print ('${e .usage }\n ' );
52+ _output
53+ ..writeln (e.message)
54+ ..writeln (e.usage);
55+
4056 exit (64 );
4157 } on Exception catch (e) {
42- print ('Oops; metrics has exited unexpectedly: "$e "' );
58+ _output.writeln ('Oops; metrics has exited unexpectedly: "$e "' );
59+
4360 exit (1 );
4461 }
4562 }
@@ -49,4 +66,14 @@ class CliRunner extends CommandRunner<void> {
4966 : ! commands.keys.contains (args.first)
5067 ? ['analyze' , ...args]
5168 : args;
69+
70+ void _usesVersionOption () {
71+ argParser
72+ ..addSeparator ('' )
73+ ..addFlag (
74+ FlagNames .version,
75+ help: 'Reports the version of this tool.' ,
76+ negatable: false ,
77+ );
78+ }
5279}
0 commit comments