@@ -50,9 +50,30 @@ 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+ let res = self . parse ( matcher, raw_args, args_cursor) ;
58+
59+ ok ! ( self . resolve_pending( matcher) ) ;
60+ #[ cfg( feature = "env" ) ]
61+ ok ! ( self . add_env( matcher) ) ;
62+ ok ! ( self . add_defaults( matcher) ) ;
63+
64+ let parse_state = res?;
65+ Validator :: new ( self . cmd ) . validate ( parse_state, matcher)
66+ }
67+
68+ // The actual parsing function
69+ #[ allow( clippy:: cognitive_complexity) ]
70+ pub ( crate ) fn parse (
71+ & mut self ,
72+ matcher : & mut ArgMatcher ,
73+ raw_args : & mut clap_lex:: RawArgs ,
74+ mut args_cursor : clap_lex:: ArgCursor ,
75+ ) -> ClapResult < ParseState > {
76+ debug ! ( "Parser::parse" ) ;
5677 // Verify all positional assertions pass
5778
5879 let mut subcmd_name: Option < String > = None ;
@@ -436,11 +457,7 @@ impl<'cmd> Parser<'cmd> {
436457 matches : sc_m. into_inner ( ) ,
437458 } ) ;
438459
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 ( parse_state, matcher) ;
460+ return Ok ( parse_state) ;
444461 } else {
445462 // Start error processing
446463 let _ = self . resolve_pending ( matcher) ;
@@ -474,11 +491,7 @@ impl<'cmd> Parser<'cmd> {
474491 ok ! ( self . parse_subcommand( & sc_name, matcher, raw_args, args_cursor, keep_state) ) ;
475492 }
476493
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 ( parse_state, matcher)
494+ Ok ( parse_state)
482495 }
483496
484497 fn match_arg_error (
0 commit comments