Closed cymruu closed 1 month ago
Ended up creating a test for this
#[test]
#[should_panic]
fn subcommand_has_binname() {
use clap::Command;
use clap_complete::{generate, shells::Bash};
fn build_cli() -> Command {
clap::Command::new("wrapper")
.bin_name("wrapper")
.subcommand(
clap::Command::new("cli")
.bin_name("cli")
.subcommand(clap::Command::new("test")),
)
}
let mut cmd = build_cli();
let mut buffer = Vec::new();
let name = cmd.get_name().to_string();
generate(Bash, &mut cmd, name, &mut buffer);
}
This is messy.
The problem is that we use names and bin names interchangeably throughout the code.
Personally, I would put effort more towards finishing #3166 than fixing this
As I believe this is resolved with the native completions, I'm going to close this. If this was incorrect, let us know!
You can track stabilization at #3166
Please complete the following tasks
Rust Version
rustc 1.72.0-nightly (f20afcc45 2023-07-04)
Clap Version
master (1289534b)
Minimal reproducible code
Create a file named
binary_wrapped.rs
inclap/clap_complete/examples/
Steps to reproduce the bug with the above code
In
clap/clap_complete
runcargo run --example binary_wrapped
Actual Behaviour
clap_complete
panicsRUST_BACKTRACE=1 cargo run --example binary_wrapped
output belowclick to expand
``` thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', clap_complete/src/generator/utils.rs:26:39 stack backtrace: 0: rust_begin_unwind at /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/panicking.rs:578:5 1: core::panicking::panic_fmt at /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/panicking.rs:67:14 2: core::panicking::panic at /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/panicking.rs:117:5 3: core::option::OptionExpected Behaviour
Bash completions should be generated
Additional Context
I think the issue might be caused by the difference between the
all_subcommands
andsubcommand_details
functions. The first one contains custom implementation of method returning command paths, while the latter uses utility method calledall_subcommands
to generate them.Debug Output