Skip to content

Commit a1d69ca

Browse files
committed
refactor(parser): Split up parsing from post-processing
1 parent 6827841 commit a1d69ca

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed

clap_builder/src/parser/parser.rs

+23-11
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)