From c7af3f197550c02343b4cc48ca74e08fbbdf0467 Mon Sep 17 00:00:00 2001 From: Mehrbod Akhlaghpour Date: Mon, 9 Jan 2023 15:36:43 -0500 Subject: [PATCH 1/3] Fix test , allow use multi args on Vector --- examples/tutorial_builder/03_03_positional_mult.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/tutorial_builder/03_03_positional_mult.rs b/examples/tutorial_builder/03_03_positional_mult.rs index bcd288d8dc1..f9baafccfa0 100644 --- a/examples/tutorial_builder/03_03_positional_mult.rs +++ b/examples/tutorial_builder/03_03_positional_mult.rs @@ -2,7 +2,8 @@ use clap::{command, Arg, ArgAction}; fn main() { let matches = command!() // requires `cargo` feature - .arg(Arg::new("name").action(ArgAction::Append)) + .arg(Arg::new("name").num_args(1..) + .action(ArgAction::Append)) .get_matches(); let args = matches From fae7382d5a0a3dc6b373b5f4234825c679de3d14 Mon Sep 17 00:00:00 2001 From: Mehrbod Akhlaghpour Date: Mon, 9 Jan 2023 15:37:29 -0500 Subject: [PATCH 2/3] Add conditional check for argument which has num_args --- src/parser/parser.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index dc99e32ece6..9cbf453f759 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -406,6 +406,17 @@ impl<'cmd> Parser<'cmd> { _parse_result ); } else { + if let Some(length_range) = arg.get_num_args() { + if length_range.max_values() == 1 && matcher.args.get(arg.get_id()).is_some() { + return Err(ClapError::unknown_argument( + self.cmd, + arg_os.display().to_string(), + None, + true, + Usage::new(self.cmd).create_usage_with_title(&[]), + )); + } + } let arg_values = matcher.pending_values_mut( arg.get_id(), Some(Identifier::Index), From 0bede4d6366dacfada0ebbd6bbbb0ef8dd07843d Mon Sep 17 00:00:00 2001 From: Mehrbod Akhlaghpour Date: Mon, 9 Jan 2023 15:50:29 -0500 Subject: [PATCH 3/3] fix: Fix a rustfmt --- examples/tutorial_builder/03_03_positional_mult.rs | 3 +-- src/parser/parser.rs | 6 ++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/tutorial_builder/03_03_positional_mult.rs b/examples/tutorial_builder/03_03_positional_mult.rs index f9baafccfa0..a4d620513df 100644 --- a/examples/tutorial_builder/03_03_positional_mult.rs +++ b/examples/tutorial_builder/03_03_positional_mult.rs @@ -2,8 +2,7 @@ use clap::{command, Arg, ArgAction}; fn main() { let matches = command!() // requires `cargo` feature - .arg(Arg::new("name").num_args(1..) - .action(ArgAction::Append)) + .arg(Arg::new("name").num_args(1..).action(ArgAction::Append)) .get_matches(); let args = matches diff --git a/src/parser/parser.rs b/src/parser/parser.rs index 9cbf453f759..ebf6b2d9444 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -407,7 +407,9 @@ impl<'cmd> Parser<'cmd> { ); } else { if let Some(length_range) = arg.get_num_args() { - if length_range.max_values() == 1 && matcher.args.get(arg.get_id()).is_some() { + if length_range.max_values() == 1 + && matcher.args.get(arg.get_id()).is_some() + { return Err(ClapError::unknown_argument( self.cmd, arg_os.display().to_string(), @@ -415,7 +417,7 @@ impl<'cmd> Parser<'cmd> { true, Usage::new(self.cmd).create_usage_with_title(&[]), )); - } + } } let arg_values = matcher.pending_values_mut( arg.get_id(),