From a8f9885250579d632aa9f6adc2a9ca17ab0833a1 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Fri, 14 Feb 2025 15:39:49 -0600 Subject: [PATCH] refactor(builder): Be more explicit in how takes_values is used --- clap_builder/src/builder/action.rs | 16 ++++++++++++++++ clap_builder/src/builder/arg.rs | 6 +----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/clap_builder/src/builder/action.rs b/clap_builder/src/builder/action.rs index 2e8221d8255..9512bdc8346 100644 --- a/clap_builder/src/builder/action.rs +++ b/clap_builder/src/builder/action.rs @@ -1,6 +1,8 @@ #[cfg(debug_assertions)] use crate::util::AnyValueId; +use crate::builder::ValueRange; + /// Behavior of arguments when they are encountered while parsing /// /// # Examples @@ -369,6 +371,20 @@ impl ArgAction { } } + pub(crate) fn default_num_args(&self) -> ValueRange { + match self { + Self::Set => ValueRange::SINGLE, + Self::Append => ValueRange::SINGLE, + Self::SetTrue => ValueRange::EMPTY, + Self::SetFalse => ValueRange::EMPTY, + Self::Count => ValueRange::EMPTY, + Self::Help => ValueRange::EMPTY, + Self::HelpShort => ValueRange::EMPTY, + Self::HelpLong => ValueRange::EMPTY, + Self::Version => ValueRange::EMPTY, + } + } + pub(crate) fn default_value(&self) -> Option<&'static std::ffi::OsStr> { match self { Self::Set => None, diff --git a/clap_builder/src/builder/arg.rs b/clap_builder/src/builder/arg.rs index 79181497652..9ed75ece8c9 100644 --- a/clap_builder/src/builder/arg.rs +++ b/clap_builder/src/builder/arg.rs @@ -4546,11 +4546,7 @@ impl Arg { if val_names_len > 1 { self.num_vals.get_or_insert(val_names_len.into()); } else { - let nargs = if self.get_action().takes_values() { - ValueRange::SINGLE - } else { - ValueRange::EMPTY - }; + let nargs = self.get_action().default_num_args(); self.num_vals.get_or_insert(nargs); } }