diff --git a/clap_mangen/src/render.rs b/clap_mangen/src/render.rs index 08da00e73bd..160bea77c27 100644 --- a/clap_mangen/src/render.rs +++ b/clap_mangen/src/render.rs @@ -99,9 +99,11 @@ pub(crate) fn options(roff: &mut Roff, cmd: &clap::Command) { (None, None) => vec![], }; - if let Some(value) = &opt.get_value_names() { - header.push(roman("=")); - header.push(italic(&value.join(" "))); + if opt.get_action().takes_values() { + if let Some(value) = &opt.get_value_names() { + header.push(roman("=")); + header.push(italic(&value.join(" "))); + } } if let Some(defs) = option_default_values(opt) { diff --git a/clap_mangen/tests/common.rs b/clap_mangen/tests/common.rs index ca9f1f9b4fb..8c830338400 100644 --- a/clap_mangen/tests/common.rs +++ b/clap_mangen/tests/common.rs @@ -312,3 +312,17 @@ pub fn possible_values_command(name: &'static str) -> clap::Command { ]), ) } + +/// Checks to make sure boolean valued "Flag options" do not generate +/// suggestions for a parameter. i.e: +/// --boolean_flag=BOOLEAN_FLAG +/// +/// This is both confusing and suggest erroneous behavior as clap will fail if you +/// pass a value to a boolean flag +pub fn flag_without_value(name: &'static str) -> clap::Command { + clap::Command::new(name).arg( + clap::Arg::new("is_bool") + .long("is_bool") + .action(clap::ArgAction::SetTrue), + ) +} diff --git a/clap_mangen/tests/roff.rs b/clap_mangen/tests/roff.rs index 223196c3a44..4d47d249f45 100644 --- a/clap_mangen/tests/roff.rs +++ b/clap_mangen/tests/roff.rs @@ -70,6 +70,13 @@ fn possible_values() { common::assert_matches_path("tests/snapshots/possible_values.bash.roff", cmd); } +#[test] +fn flag_without_value() { + let name = "my-app"; + let cmd = common::flag_without_value(name); + common::assert_matches_path("tests/snapshots/flag_without_value.bash.roff", cmd); +} + #[test] fn sub_subcommands_help() { let name = "my-app"; diff --git a/clap_mangen/tests/snapshots/flag_without_value.bash.roff b/clap_mangen/tests/snapshots/flag_without_value.bash.roff new file mode 100644 index 00000000000..b4b7f45cb68 --- /dev/null +++ b/clap_mangen/tests/snapshots/flag_without_value.bash.roff @@ -0,0 +1,15 @@ +.ie /n(.g .ds Aq /(aq +.el .ds Aq ' +.TH my-app 1 "my-app " +.SH NAME +my/-app +.SH SYNOPSIS +/fBmy/-app/fR [/fB/-/-is_bool/fR] [/fB/-h/fR|/fB/-/-help/fR] +.SH DESCRIPTION +.SH OPTIONS +.TP +/fB/-/-is_bool/fR + +.TP +/fB/-h/fR, /fB/-/-help/fR +Print help information