Skip to content

Commit

Permalink
fix(complete): Use bin_name for subcommands
Browse files Browse the repository at this point in the history
Bash completions for subcommands used package
name, which broke completions when the `bin_name`
was different.

Update the `custom_bin_name` test to reflect the
correct behavior.
  • Loading branch information
Serock3 committed Jan 19, 2024
1 parent 6411995 commit ba378e6
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 13 deletions.
11 changes: 6 additions & 5 deletions clap_complete/src/shells/bash.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ impl Generator for Bash {
.get_bin_name()
.expect("crate::generate should have set the bin_name");

let fn_name = bin_name.replace('-', "__");

w!(
buf,
format!(
Expand Down Expand Up @@ -65,18 +67,18 @@ else
fi
",
name = bin_name,
cmd = bin_name.replace('-', "__"),
cmd = fn_name,
name_opts = all_options_for_path(cmd, bin_name),
name_opts_details = option_details_for_path(cmd, bin_name),
subcmds = all_subcommands(cmd),
subcmds = all_subcommands(cmd, &fn_name),
subcmd_details = subcommand_details(cmd)
)
.as_bytes()
);
}
}

fn all_subcommands(cmd: &Command) -> String {
fn all_subcommands(cmd: &Command, parent_fn_name: &str) -> String {
debug!("all_subcommands");

fn add_command(
Expand Down Expand Up @@ -106,9 +108,8 @@ fn all_subcommands(cmd: &Command) -> String {
}
}
let mut subcmds = vec![];
let fn_name = cmd.get_name().replace('-', "__");
for subcmd in cmd.get_subcommands() {
add_command(&fn_name, subcmd, &mut subcmds);
add_command(parent_fn_name, subcmd, &mut subcmds);
}
subcmds.sort();

Expand Down
16 changes: 8 additions & 8 deletions clap_complete/tests/snapshots/custom_bin_name.bash
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,17 @@ _bin-name() {
",$1")
cmd="bin__name"
;;
my__app,help)
cmd="my__app__help"
bin__name,help)
cmd="bin__name__help"
;;
my__app,test)
cmd="my__app__test"
bin__name,test)
cmd="bin__name__test"
;;
my__app__help,help)
cmd="my__app__help__help"
bin__name__help,help)
cmd="bin__name__help__help"
;;
my__app__help,test)
cmd="my__app__help__test"
bin__name__help,test)
cmd="bin__name__help__test"
;;
*)
;;
Expand Down

0 comments on commit ba378e6

Please sign in to comment.