fix(help): Ensure padding isn't stripped

Fixes #5083
This commit is contained in:
Ed Page 2023-08-22 16:02:33 -05:00
parent afefdc9414
commit bf3f25ebb2
3 changed files with 20 additions and 3 deletions

View file

@ -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)
@ -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");

View file

@ -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");
}

View file

@ -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)