Skip to content

Commit

Permalink
fix(help): Ensure padding isn't stripped
Browse files Browse the repository at this point in the history
Fixes #5083
  • Loading branch information
epage committed Aug 22, 2023
1 parent afefdc9 commit bf3f25e
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
15 changes: 15 additions & 0 deletions clap_builder/src/builder/styled_str.rs
@@ -1,3 +1,5 @@
#![cfg_attr(not(feature = "usage"), allow(dead_code))]

/// Terminal-styling container
///
/// Styling may be encoded as [ANSI Escape Code](https://en.wikipedia.org/wiki/ANSI_escape_code)
Expand Down Expand Up @@ -47,6 +49,19 @@ impl StyledStr {
self.0 = self.0.trim().to_owned()
}

pub(crate) fn trim_start_lines(&mut self) {
if let Some(pos) = self.0.find('\n') {
let (leading, help) = self.0.split_at(pos + 1);
if leading.trim().is_empty() {
self.0 = help.to_owned()
}
}
}

pub(crate) fn trim_end(&mut self) {
self.0 = self.0.trim_end().to_owned()
}

#[cfg(feature = "help")]
pub(crate) fn replace_newline_var(&mut self) {
self.0 = self.0.replace("{n}", "\n");
Expand Down
6 changes: 4 additions & 2 deletions clap_builder/src/output/help.rs
Expand Up @@ -30,8 +30,10 @@ pub(crate) fn write_help(writer: &mut StyledStr, cmd: &Command, usage: &Usage<'_
}
}

// Remove any extra lines caused by book keeping
writer.trim();
// Remove any lines from unused sections
writer.trim_start_lines();
// Remove any whitespace caused by book keeping
writer.trim_end();
// Ensure there is still a trailing newline
writer.push_str("\n");
}
2 changes: 1 addition & 1 deletion tests/builder/help.rs
Expand Up @@ -1342,7 +1342,7 @@ fn dont_strip_padding_issue_5083() {
Command::new("two"),
Command::new("three"),
]);
static EXPECTED: &str = "one
static EXPECTED: &str = " one
two
three
help Print this message or the help of the given subcommand(s)
Expand Down

0 comments on commit bf3f25e

Please sign in to comment.