@@ -50,9 +50,29 @@ impl<'cmd> Parser<'cmd> {
5050 & mut self ,
5151 matcher : & mut ArgMatcher ,
5252 raw_args : & mut clap_lex:: RawArgs ,
53- mut args_cursor : clap_lex:: ArgCursor ,
53+ args_cursor : clap_lex:: ArgCursor ,
5454 ) -> ClapResult < ( ) > {
5555 debug ! ( "Parser::get_matches_with" ) ;
56+
57+ ok ! ( self . parse( matcher, raw_args, args_cursor) ) ;
58+ ok ! ( self . resolve_pending( matcher) ) ;
59+
60+ #[ cfg( feature = "env" ) ]
61+ ok ! ( self . add_env( matcher) ) ;
62+ ok ! ( self . add_defaults( matcher) ) ;
63+
64+ Validator :: new ( self . cmd ) . validate ( matcher)
65+ }
66+
67+ // The actual parsing function
68+ #[ allow( clippy:: cognitive_complexity) ]
69+ pub ( crate ) fn parse (
70+ & mut self ,
71+ matcher : & mut ArgMatcher ,
72+ raw_args : & mut clap_lex:: RawArgs ,
73+ mut args_cursor : clap_lex:: ArgCursor ,
74+ ) -> ClapResult < ( ) > {
75+ debug ! ( "Parser::parse" ) ;
5676 // Verify all positional assertions pass
5777
5878 let mut subcmd_name: Option < String > = None ;
@@ -436,11 +456,7 @@ impl<'cmd> Parser<'cmd> {
436456 matches : sc_m. into_inner ( ) ,
437457 } ) ;
438458
439- ok ! ( self . resolve_pending( matcher) ) ;
440- #[ cfg( feature = "env" ) ]
441- ok ! ( self . add_env( matcher) ) ;
442- ok ! ( self . add_defaults( matcher) ) ;
443- return Validator :: new ( self . cmd ) . validate ( matcher) ;
459+ return Ok ( ( ) ) ;
444460 } else {
445461 // Start error processing
446462 let _ = self . resolve_pending ( matcher) ;
@@ -474,11 +490,7 @@ impl<'cmd> Parser<'cmd> {
474490 ok ! ( self . parse_subcommand( & sc_name, matcher, raw_args, args_cursor, keep_state) ) ;
475491 }
476492
477- ok ! ( self . resolve_pending( matcher) ) ;
478- #[ cfg( feature = "env" ) ]
479- ok ! ( self . add_env( matcher) ) ;
480- ok ! ( self . add_defaults( matcher) ) ;
481- Validator :: new ( self . cmd ) . validate ( matcher)
493+ Ok ( ( ) )
482494 }
483495
484496 fn match_arg_error (
0 commit comments