Skip to content

Commit

Permalink
Merge pull request #4269 from epage/usage
Browse files Browse the repository at this point in the history
fix(error): Polish `--flag=bad-value` error
  • Loading branch information
epage committed Sep 27, 2022
2 parents c7dd03e + cb1cd67 commit 9cd1939
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/parser/parser.rs
Expand Up @@ -183,7 +183,7 @@ impl<'cmd> Parser<'cmd> {
self.cmd,
rest,
arg,
Usage::new(self.cmd).create_usage_no_title(&used),
Usage::new(self.cmd).create_usage_with_title(&used),
));
}
ParseResult::MaybeHyphenValue => {
Expand Down Expand Up @@ -778,7 +778,7 @@ impl<'cmd> Parser<'cmd> {
"Parser::parse_long_arg({:?}): Got invalid literal `{:?}`",
long_arg, rest
);
let used: Vec<Id> = matcher
let mut used: Vec<Id> = matcher
.arg_ids()
.filter(|arg_id| {
matcher.check_explicit(arg_id, &crate::builder::ArgPredicate::IsPresent)
Expand All @@ -790,6 +790,7 @@ impl<'cmd> Parser<'cmd> {
})
.cloned()
.collect();
used.push(arg.get_id().clone());

Ok(ParseResult::UnneededAttachedValue {
rest: rest.to_str_lossy().into_owned(),
Expand Down
18 changes: 18 additions & 0 deletions tests/builder/flags.rs
Expand Up @@ -136,6 +136,24 @@ fn multiple_flags_in_single() {
assert!(*m.get_one::<bool>("debug").expect("defaulted by clap"));
}

#[test]
#[cfg(feature = "error-context")]
fn unexpected_value_error() {
const USE_FLAG_AS_ARGUMENT: &str = "\
error: The value 'foo' was provided to '--a-flag' but it wasn't expecting any more values
Usage: mycat --a-flag [filename]
For more information try '--help'
";

let cmd = Command::new("mycat")
.arg(Arg::new("filename"))
.arg(Arg::new("a-flag").long("a-flag").action(ArgAction::SetTrue));

utils::assert_output(cmd, "mycat --a-flag=foo", USE_FLAG_AS_ARGUMENT, true);
}

#[test]
#[cfg(feature = "error-context")]
fn issue_1284_argument_in_flag_style() {
Expand Down

0 comments on commit 9cd1939

Please sign in to comment.