From 3a8d2a579bce8e3a1555a7e905fdd796fee591d2 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 27 Sep 2022 09:19:27 -0500 Subject: [PATCH 1/3] test(parser): Verify existing --flag=bad-value case --- tests/builder/flags.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/builder/flags.rs b/tests/builder/flags.rs index e86adcdfc7b..48c54843d0c 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 + +mycat [OPTIONS] [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() { From 12d76d649ad3e66147bf3ef03029e1d1d20f13de Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 27 Sep 2022 09:20:42 -0500 Subject: [PATCH 2/3] fix(error): Include 'Usage:' title in --flag=bad-value error --- src/parser/parser.rs | 2 +- tests/builder/flags.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index cd96d597029..9fdaa4eff2c 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 => { diff --git a/tests/builder/flags.rs b/tests/builder/flags.rs index 48c54843d0c..83d2464b681 100644 --- a/tests/builder/flags.rs +++ b/tests/builder/flags.rs @@ -142,7 +142,7 @@ 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 -mycat [OPTIONS] [filename] +Usage: mycat [OPTIONS] [filename] For more information try '--help' "; From cb1cd6700985add94cb9f6b6c88948007904aa74 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 27 Sep 2022 09:25:24 -0500 Subject: [PATCH 3/3] fix(error): Include failed arg in usage in --flag=bad-value error --- src/parser/parser.rs | 3 ++- tests/builder/flags.rs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index 9fdaa4eff2c..fb43923f8c5 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -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 83d2464b681..50ba789a4f3 100644 --- a/tests/builder/flags.rs +++ b/tests/builder/flags.rs @@ -142,7 +142,7 @@ 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 [OPTIONS] [filename] +Usage: mycat --a-flag [filename] For more information try '--help' ";