From f76a867e3f16a4dbb7f9e73652bcd5d14723fe5a Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 28 Jul 2022 15:31:40 -0500 Subject: [PATCH] fix: Simplify flag parsing Multiple values can only happen from env variables when configured by the user, so let's not go out of our way to deal with it. --- src/parser/parser.rs | 53 +++++++++++++------------------------------- 1 file changed, 16 insertions(+), 37 deletions(-) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index a427497d50c..d23e91a6ec1 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -1184,17 +1184,10 @@ impl<'help, 'cmd> Parser<'help, 'cmd> { Ok(ParseResult::ValuesDone) } ArgAction::SetTrue => { - let raw_vals = match raw_vals.len() { - 0 => { - vec![OsString::from("true")] - } - 1 => raw_vals, - _ => { - debug!("Parser::react ignoring trailing values: {:?}", raw_vals); - let mut raw_vals = raw_vals; - raw_vals.resize(1, Default::default()); - raw_vals - } + let raw_vals = if raw_vals.is_empty() { + vec![OsString::from("true")] + } else { + raw_vals }; matcher.remove(&arg.id); @@ -1203,17 +1196,10 @@ impl<'help, 'cmd> Parser<'help, 'cmd> { Ok(ParseResult::ValuesDone) } ArgAction::SetFalse => { - let raw_vals = match raw_vals.len() { - 0 => { - vec![OsString::from("false")] - } - 1 => raw_vals, - _ => { - debug!("Parser::react ignoring trailing values: {:?}", raw_vals); - let mut raw_vals = raw_vals; - raw_vals.resize(1, Default::default()); - raw_vals - } + let raw_vals = if raw_vals.is_empty() { + vec![OsString::from("false")] + } else { + raw_vals }; matcher.remove(&arg.id); @@ -1222,21 +1208,14 @@ impl<'help, 'cmd> Parser<'help, 'cmd> { Ok(ParseResult::ValuesDone) } ArgAction::Count => { - let raw_vals = match raw_vals.len() { - 0 => { - let existing_value = *matcher - .get_one::(arg.get_id()) - .unwrap_or(&0); - let next_value = existing_value.saturating_add(1); - vec![OsString::from(next_value.to_string())] - } - 1 => raw_vals, - _ => { - debug!("Parser::react ignoring trailing values: {:?}", raw_vals); - let mut raw_vals = raw_vals; - raw_vals.resize(1, Default::default()); - raw_vals - } + let raw_vals = if raw_vals.is_empty() { + let existing_value = *matcher + .get_one::(arg.get_id()) + .unwrap_or(&0); + let next_value = existing_value.saturating_add(1); + vec![OsString::from(next_value.to_string())] + } else { + raw_vals }; matcher.remove(&arg.id);