Skip to content

Commit 3383242

Browse files
authored
Merge pull request #5205 from epage/flatten-refactor
refavtor: Prepare for help flattening
2 parents a920a7f + 2142b13 commit 3383242

File tree

4 files changed

+24
-17
lines changed

4 files changed

+24
-17
lines changed

clap_builder/src/builder/command.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3335,6 +3335,20 @@ impl Command {
33353335
self.usage_name.as_deref()
33363336
}
33373337

3338+
#[inline]
3339+
#[cfg(feature = "usage")]
3340+
pub(crate) fn get_usage_name_fallback(&self) -> &str {
3341+
self.get_usage_name()
3342+
.unwrap_or_else(|| self.get_bin_name_fallback())
3343+
}
3344+
3345+
#[inline]
3346+
#[cfg(not(feature = "usage"))]
3347+
#[allow(dead_code)]
3348+
pub(crate) fn get_usage_name_fallback(&self) -> &str {
3349+
self.get_bin_name_fallback()
3350+
}
3351+
33383352
/// Get the name of the binary.
33393353
#[inline]
33403354
pub fn get_display_name(&self) -> Option<&str> {
@@ -3347,6 +3361,12 @@ impl Command {
33473361
self.bin_name.as_deref()
33483362
}
33493363

3364+
/// Get the name of the binary.
3365+
#[inline]
3366+
pub(crate) fn get_bin_name_fallback(&self) -> &str {
3367+
self.bin_name.as_deref().unwrap_or_else(|| self.get_name())
3368+
}
3369+
33503370
/// Set binary name. Uses `&mut self` instead of `self`.
33513371
pub fn set_bin_name(&mut self, name: impl Into<String>) {
33523372
self.bin_name = Some(name.into());

clap_builder/src/output/usage.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ impl<'cmd> Usage<'cmd> {
135135
let literal = &self.styles.get_literal();
136136
let placeholder = &self.styles.get_placeholder();
137137

138-
let bin_name = self.get_name();
138+
let bin_name = self.cmd.get_usage_name_fallback();
139139
if !bin_name.is_empty() {
140140
// the trim won't properly remove a leading space due to the formatting
141141
let _ = write!(
@@ -176,7 +176,7 @@ impl<'cmd> Usage<'cmd> {
176176
styled.trim_end();
177177
let _ = write!(styled, "{}", USAGE_SEP);
178178
if self.cmd.is_args_conflicts_with_subcommands_set() {
179-
let bin_name = self.get_name();
179+
let bin_name = self.cmd.get_usage_name_fallback();
180180
// Short-circuit full usage creation since no args will be relevant
181181
let _ = write!(
182182
styled,
@@ -211,13 +211,6 @@ impl<'cmd> Usage<'cmd> {
211211
}
212212
}
213213

214-
fn get_name(&self) -> &str {
215-
self.cmd
216-
.get_usage_name()
217-
.or_else(|| self.cmd.get_bin_name())
218-
.unwrap_or_else(|| self.cmd.get_name())
219-
}
220-
221214
// Determines if we need the `[OPTIONS]` tag in the usage string
222215
fn needs_options_tag(&self) -> bool {
223216
debug!("Usage::needs_options_tag");

clap_builder/src/parser/parser.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -501,10 +501,7 @@ impl<'cmd> Parser<'cmd> {
501501
self.cmd,
502502
arg_os.display().to_string(),
503503
candidates,
504-
self.cmd
505-
.get_bin_name()
506-
.unwrap_or_else(|| self.cmd.get_name())
507-
.to_owned(),
504+
self.cmd.get_bin_name_fallback().to_owned(),
508505
suggested_trailing_arg,
509506
Usage::new(self.cmd).create_usage_with_title(&[]),
510507
);

clap_builder/src/parser/validator.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,7 @@ impl<'cmd> Validator<'cmd> {
6363
}
6464
}
6565
if !has_subcmd && self.cmd.is_subcommand_required_set() {
66-
let bn = self
67-
.cmd
68-
.get_bin_name()
69-
.unwrap_or_else(|| self.cmd.get_name());
66+
let bn = self.cmd.get_bin_name_fallback();
7067
return Err(Error::missing_subcommand(
7168
self.cmd,
7269
bn.to_string(),

0 commit comments

Comments
 (0)