Skip to content

Commit 6ba54e3

Browse files
committed
fix(help): Display value terminator and delimiter
Closes #5392 and #4812, related to #1052
1 parent b02bc87 commit 6ba54e3

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

clap_builder/src/builder/arg.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -4647,6 +4647,7 @@ impl Arg {
46474647
val_names = vec![val_name; min];
46484648
}
46494649

4650+
let delimiter = self.get_value_delimiter().unwrap_or(' ');
46504651
debug_assert!(self.is_takes_value_set());
46514652
for (n, val_name) in val_names.iter().enumerate() {
46524653
let arg_name = if self.is_positional() && (num_vals.min_values() == 0 || !required) {
@@ -4656,7 +4657,7 @@ impl Arg {
46564657
};
46574658

46584659
if n != 0 {
4659-
rendered.push(' ');
4660+
rendered.push(delimiter);
46604661
}
46614662
rendered.push_str(&arg_name);
46624663
}
@@ -4670,6 +4671,11 @@ impl Arg {
46704671
rendered.push_str("...");
46714672
}
46724673

4674+
if let Some(terminator) = self.get_value_terminator() {
4675+
rendered.push(' ');
4676+
rendered.push_str(terminator);
4677+
}
4678+
46734679
rendered
46744680
}
46754681

clap_builder/src/output/help_template.rs

+18-1
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,13 @@ impl<'cmd, 'writer> HelpTemplate<'cmd, 'writer> {
766766
a.default_vals
767767
);
768768

769+
// We might need up to 4 bytes to encode an utf-8 character
770+
let mut buffer = [0u8; 4];
771+
let delimiter = a
772+
.get_value_delimiter()
773+
.unwrap_or(' ')
774+
.encode_utf8(&mut buffer);
775+
769776
let pvs = a
770777
.default_vals
771778
.iter()
@@ -778,11 +785,21 @@ impl<'cmd, 'writer> HelpTemplate<'cmd, 'writer> {
778785
}
779786
})
780787
.collect::<Vec<_>>()
781-
.join(" ");
788+
.join(delimiter);
782789

783790
spec_vals.push(format!("[default: {pvs}]"));
784791
}
785792

793+
if let Some(delimiter) = a.get_value_delimiter() {
794+
debug!("HelpTemplate::spec_vals: Found delimiter...{delimiter:?}");
795+
spec_vals.push(format!("[value delimiter: {delimiter:?}]"));
796+
}
797+
798+
if let Some(terminator) = a.get_value_terminator() {
799+
debug!("HelpTemplate::spec_vals: Found terminator...{terminator:?}");
800+
spec_vals.push(format!("[value terminator: {terminator:?}]"));
801+
}
802+
786803
let als = a
787804
.aliases
788805
.iter()

tests/builder/help.rs

+9-9
Original file line numberDiff line numberDiff line change
@@ -2053,10 +2053,10 @@ fn issue_1052_require_delim_help() {
20532053
let expected = str![[r#"
20542054
tests stuff
20552055
2056-
Usage: test --fake <some> <val>
2056+
Usage: test --fake <some>:<val>
20572057
20582058
Options:
2059-
-f, --fake <some> <val> some help
2059+
-f, --fake <some>:<val> some help [value delimiter: ':']
20602060
-h, --help Print help
20612061
-V, --version Print version
20622062
@@ -2082,11 +2082,11 @@ fn display_value_terminator() {
20822082
let expected = str![[r#"
20832083
Likes seeing the value terminator
20842084
2085-
Usage: test --cmd <cmd>...
2085+
Usage: test --cmd <cmd>... ;
20862086
20872087
Options:
2088-
--cmd <cmd>... command to run
2089-
-h, --help Print help
2088+
--cmd <cmd>... ; command to run [value terminator: ";"]
2089+
-h, --help Print help
20902090
20912091
"#]];
20922092
utils::assert_output(cmd, "test --help", expected, false);
@@ -2118,10 +2118,10 @@ fn custom_headers_headers() {
21182118
let expected = str![[r#"
21192119
does stuff
21202120
2121-
Usage: test [OPTIONS] --fake <some> <val>
2121+
Usage: test [OPTIONS] --fake <some>:<val>
21222122
21232123
Options:
2124-
-f, --fake <some> <val> some help
2124+
-f, --fake <some>:<val> some help [value delimiter: ':']
21252125
-h, --help Print help
21262126
-V, --version Print version
21272127
@@ -2189,10 +2189,10 @@ fn multiple_custom_help_headers() {
21892189
let expected = str![[r#"
21902190
does stuff
21912191
2192-
Usage: test [OPTIONS] --fake <some> <val> --birthday-song <song> --birthday-song-volume <volume>
2192+
Usage: test [OPTIONS] --fake <some>:<val> --birthday-song <song> --birthday-song-volume <volume>
21932193
21942194
Options:
2195-
-f, --fake <some> <val> some help
2195+
-f, --fake <some>:<val> some help [value delimiter: ':']
21962196
--style <style> Choose musical style to play the song
21972197
-s, --speed <SPEED> How fast? [possible values: fast, slow]
21982198
-h, --help Print help

0 commit comments

Comments
 (0)