From e6ee585a4b36d540e19f741b680bc944912aa3c2 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 4 Jan 2022 09:00:13 -0600 Subject: [PATCH] fix: Clarify short rejection in debug --- src/lib.rs | 2 ++ src/parse/parser.rs | 31 ++++++++++++++++++++++--------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 02b4d6829e3..fcc7b4fab85 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,6 +19,8 @@ // HACK https://github.com/rust-lang/rust-clippy/issues/7290 #![allow(clippy::single_component_path_imports)] #![allow(clippy::branches_sharing_code)] +// Doesn't allow for debug statements, etc to be unique +#![allow(clippy::if_same_then_else)] #[cfg(not(feature = "std"))] compile_error!("`std` feature is currently required to build `clap`"); diff --git a/src/parse/parser.rs b/src/parse/parser.rs index d490f851c25..d759896396b 100644 --- a/src/parse/parser.rs +++ b/src/parse/parser.rs @@ -1181,17 +1181,30 @@ impl<'help, 'app> Parser<'help, 'app> { debug!("Parser::parse_short_arg: short_arg={:?}", short_arg); let arg = short_arg.to_str_lossy(); - if (self.is_set(AS::AllowNegativeNumbers) && arg.parse::().is_ok()) - || (self.is_set(AS::AllowHyphenValues) - && arg.chars().any(|c| !self.app.contains_short(c))) - || matches!(parse_state, ParseState::Opt(opt) | ParseState::Pos(opt) + #[allow(clippy::blocks_in_if_conditions)] + if self.is_set(AS::AllowNegativeNumbers) && arg.parse::().is_ok() { + debug!("Parser::parse_short_arg: negative number"); + return ParseResult::MaybeHyphenValue; + } else if self.is_set(AS::AllowHyphenValues) + && arg.chars().any(|c| !self.app.contains_short(c)) + { + debug!("Parser::parse_short_args: contains non-short flag"); + return ParseResult::MaybeHyphenValue; + } else if matches!(parse_state, ParseState::Opt(opt) | ParseState::Pos(opt) if self.app[opt].is_set(ArgSettings::AllowHyphenValues)) - || self - .app - .args - .get(&pos_counter) - .map_or(false, |arg| arg.is_set(ArgSettings::AllowHyphenValues)) { + debug!("Parser::parse_short_args: prior arg accepts hyphenated values",); + return ParseResult::MaybeHyphenValue; + } else if self + .app + .args + .get(&pos_counter) + .map_or(false, |arg| arg.is_set(ArgSettings::AllowHyphenValues)) + { + debug!( + "Parser::parse_short_args: positional at {} allows hyphens", + pos_counter + ); return ParseResult::MaybeHyphenValue; }