@@ -44,15 +44,16 @@ pub(crate) enum Command {
4444 ProcMacro ,
4545 RunServer ,
4646 Version ,
47+ Help ,
4748}
4849
4950impl Args {
50- pub ( crate ) fn parse ( ) -> Result < Result < Args , HelpPrinted > > {
51+ pub ( crate ) fn parse ( ) -> Result < Args > {
5152 let mut matches = Arguments :: from_env ( ) ;
5253
5354 if matches. contains ( "--version" ) {
5455 matches. finish ( ) . or_else ( handle_extra_flags) ?;
55- return Ok ( Ok ( Args { verbosity : Verbosity :: Normal , command : Command :: Version } ) ) ;
56+ return Ok ( Args { verbosity : Verbosity :: Normal , command : Command :: Version } ) ;
5657 }
5758
5859 let verbosity = match (
@@ -68,15 +69,16 @@ impl Args {
6869 ( false , true , true ) => bail ! ( "Invalid flags: -q conflicts with -v" ) ,
6970 } ;
7071
72+ let help = Ok ( Args { verbosity, command : Command :: Help } ) ;
7173 let subcommand = match matches. subcommand ( ) ? {
7274 Some ( it) => it,
7375 None => {
7476 if matches. contains ( [ "-h" , "--help" ] ) {
7577 print_subcommands ( ) ;
76- return Ok ( Err ( HelpPrinted ) ) ;
78+ return help ;
7779 }
7880 matches. finish ( ) . or_else ( handle_extra_flags) ?;
79- return Ok ( Ok ( Args { verbosity, command : Command :: RunServer } ) ) ;
81+ return Ok ( Args { verbosity, command : Command :: RunServer } ) ;
8082 }
8183 } ;
8284 let command = match subcommand. as_str ( ) {
9395 -h, --help Prints help information
9496 --no-dump"
9597 ) ;
96- return Ok ( Err ( HelpPrinted ) ) ;
98+ return help ;
9799 }
98100
99101 let no_dump = matches. contains ( "--no-dump" ) ;
@@ -112,7 +114,7 @@ USAGE:
112114FLAGS:
113115 -h, --help Prints help inforamtion"
114116 ) ;
115- return Ok ( Err ( HelpPrinted ) ) ;
117+ return help ;
116118 }
117119
118120 matches. finish ( ) . or_else ( handle_extra_flags) ?;
@@ -132,7 +134,7 @@ FLAGS:
132134 -h, --help Prints help information
133135 -r, --rainbow"
134136 ) ;
135- return Ok ( Err ( HelpPrinted ) ) ;
137+ return help ;
136138 }
137139
138140 let rainbow = matches. contains ( [ "-r" , "--rainbow" ] ) ;
@@ -166,7 +168,7 @@ OPTIONS:
166168ARGS:
167169 <PATH>"
168170 ) ;
169- return Ok ( Err ( HelpPrinted ) ) ;
171+ return help ;
170172 }
171173
172174 let randomize = matches. contains ( "--randomize" ) ;
@@ -220,7 +222,7 @@ OPTIONS:
220222ARGS:
221223 <PATH> Project to analyse"
222224 ) ;
223- return Ok ( Err ( HelpPrinted ) ) ;
225+ return help ;
224226 }
225227
226228 let path: PathBuf = matches. opt_value_from_str ( "--project" ) ?. unwrap_or_default ( ) ;
@@ -266,7 +268,7 @@ FLAGS:
266268ARGS:
267269 <PATH>"
268270 ) ;
269- return Ok ( Err ( HelpPrinted ) ) ;
271+ return help ;
270272 }
271273
272274 let load_output_dirs = matches. contains ( "--load-output-dirs" ) ;
@@ -302,7 +304,7 @@ FLAGS:
302304ARGS:
303305 <RULE> A structured search replace rule"
304306 ) ;
305- return Ok ( Err ( HelpPrinted ) ) ;
307+ return help ;
306308 }
307309 let mut rules = Vec :: new ( ) ;
308310 while let Some ( rule) = matches. free_from_str ( ) ? {
@@ -329,7 +331,7 @@ FLAGS:
329331ARGS:
330332 <PATTERN> A structured search pattern"
331333 ) ;
332- return Ok ( Err ( HelpPrinted ) ) ;
334+ return help ;
333335 }
334336 let debug_snippet = matches. opt_value_from_str ( "--debug" ) ?;
335337 let mut patterns = Vec :: new ( ) ;
@@ -340,10 +342,10 @@ ARGS:
340342 }
341343 _ => {
342344 print_subcommands ( ) ;
343- return Ok ( Err ( HelpPrinted ) ) ;
345+ return help ;
344346 }
345347 } ;
346- Ok ( Ok ( Args { verbosity, command } ) )
348+ Ok ( Args { verbosity, command } )
347349 }
348350}
349351
@@ -371,8 +373,6 @@ SUBCOMMANDS:
371373 )
372374}
373375
374- pub ( crate ) struct HelpPrinted ;
375-
376376fn handle_extra_flags ( e : pico_args:: Error ) -> Result < ( ) > {
377377 if let pico_args:: Error :: UnusedArgsLeft ( flags) = e {
378378 let mut invalid_flags = String :: new ( ) ;
0 commit comments