Skip to content

Commit

Permalink
refactor(help): Consolidate help errors
Browse files Browse the repository at this point in the history
  • Loading branch information
epage committed Apr 21, 2022
1 parent 6a9a5d0 commit ebeade9
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 20 deletions.
39 changes: 21 additions & 18 deletions src/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ impl<'help, 'cmd> Parser<'help, 'cmd> {
))
}
ParseResult::HelpFlag => {
return Err(self.help_err(true));
return Err(self.help_err(true, Stream::Stdout));
}
ParseResult::VersionFlag => {
return Err(self.version_err(true));
Expand Down Expand Up @@ -341,7 +341,7 @@ impl<'help, 'cmd> Parser<'help, 'cmd> {
));
}
ParseResult::HelpFlag => {
return Err(self.help_err(false));
return Err(self.help_err(false, Stream::Stdout));
}
ParseResult::VersionFlag => {
return Err(self.version_err(false));
Expand Down Expand Up @@ -646,7 +646,7 @@ impl<'help, 'cmd> Parser<'help, 'cmd> {

let parser = Parser::new(&mut sc);

Err(parser.help_err(true))
Err(parser.help_err(true, Stream::Stdout))
}

fn is_new_arg(&self, next: &clap_lex::ParsedArg<'_>, current_positional: &Arg) -> bool {
Expand Down Expand Up @@ -1418,7 +1418,7 @@ impl<'help, 'cmd> Parser<'help, 'cmd> {
// Early return on `HelpFlag` or `VersionFlag`.
match self.check_for_help_and_version_str(&val) {
Some(ParseResult::HelpFlag) => {
return Err(self.help_err(true));
return Err(self.help_err(true, Stream::Stdout));
}
Some(ParseResult::VersionFlag) => {
return Err(self.version_err(true));
Expand Down Expand Up @@ -1508,26 +1508,29 @@ impl<'help, 'cmd> Parser<'help, 'cmd> {
)
}

pub(crate) fn write_help_err(&self) -> ClapResult<Colorizer> {
let usage = Usage::new(self.cmd);
let mut c = Colorizer::new(Stream::Stderr, self.color_help());
Help::new(HelpWriter::Buffer(&mut c), self.cmd, &usage, false).write_help()?;
Ok(c)
}

fn help_err(&self, mut use_long: bool) -> ClapError {
pub(crate) fn write_help_err(
&self,
mut use_long: bool,
stream: Stream,
) -> ClapResult<Colorizer> {
debug!(
"Parser::help_err: use_long={:?}",
use_long && self.cmd.use_long_help()
"Parser::write_help_err: use_long={:?}, stream={:?}",
use_long && self.cmd.use_long_help(),
stream
);

use_long = use_long && self.cmd.use_long_help();
let usage = Usage::new(self.cmd);
let mut c = Colorizer::new(Stream::Stdout, self.color_help());

match Help::new(HelpWriter::Buffer(&mut c), self.cmd, &usage, use_long).write_help() {
Err(e) => e.into(),
_ => ClapError::display_help(self.cmd, c),
let mut c = Colorizer::new(stream, self.color_help());
Help::new(HelpWriter::Buffer(&mut c), self.cmd, &usage, use_long).write_help()?;
Ok(c)
}

fn help_err(&self, use_long: bool, stream: Stream) -> ClapError {
match self.write_help_err(use_long, stream) {
Ok(c) => ClapError::display_help(self.cmd, c),
Err(e) => e,
}
}

Expand Down
5 changes: 3 additions & 2 deletions src/parse/validator.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Internal
use crate::build::{AppSettings, Arg, ArgPredicate, Command, PossibleValue};
use crate::error::{Error, Result as ClapResult};
use crate::output::fmt::Stream;
use crate::output::Usage;
use crate::parse::{ArgMatcher, MatchedArg, ParseState, Parser};
use crate::util::ChildGraph;
Expand Down Expand Up @@ -64,7 +65,7 @@ impl<'help, 'cmd, 'parser> Validator<'help, 'cmd, 'parser> {
.filter(|arg_id| matcher.check_explicit(arg_id, ArgPredicate::IsPresent))
.count();
if num_user_values == 0 {
let message = self.p.write_help_err()?;
let message = self.p.write_help_err(false, Stream::Stderr)?;
return Err(Error::display_help_error(self.p.cmd, message));
}
}
Expand All @@ -84,7 +85,7 @@ impl<'help, 'cmd, 'parser> Validator<'help, 'cmd, 'parser> {
));
} else if !has_subcmd && self.p.cmd.is_set(AppSettings::SubcommandRequiredElseHelp) {
debug!("Validator::new::get_matches_with: SubcommandRequiredElseHelp=true");
let message = self.p.write_help_err()?;
let message = self.p.write_help_err(false, Stream::Stderr)?;
return Err(Error::display_help_error(self.p.cmd, message));
}

Expand Down

0 comments on commit ebeade9

Please sign in to comment.