diff --git a/src/parser/parser.rs b/src/parser/parser.rs index cd96d597029..fb43923f8c5 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -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 => { @@ -778,7 +778,7 @@ impl<'cmd> Parser<'cmd> { "Parser::parse_long_arg({:?}): Got invalid literal `{:?}`", long_arg, rest ); - let used: Vec = matcher + let mut used: Vec = matcher .arg_ids() .filter(|arg_id| { matcher.check_explicit(arg_id, &crate::builder::ArgPredicate::IsPresent) @@ -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(), diff --git a/tests/builder/flags.rs b/tests/builder/flags.rs index e86adcdfc7b..50ba789a4f3 100644 --- a/tests/builder/flags.rs +++ b/tests/builder/flags.rs @@ -136,6 +136,24 @@ fn multiple_flags_in_single() { assert!(*m.get_one::("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() {