summaryrefslogtreecommitdiffstats
path: root/vendor/clap_complete/src/shells/bash.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/clap_complete/src/shells/bash.rs')
-rw-r--r--vendor/clap_complete/src/shells/bash.rs76
1 files changed, 51 insertions, 25 deletions
diff --git a/vendor/clap_complete/src/shells/bash.rs b/vendor/clap_complete/src/shells/bash.rs
index 08bf1190c..e110537e5 100644
--- a/vendor/clap_complete/src/shells/bash.rs
+++ b/vendor/clap_complete/src/shells/bash.rs
@@ -31,8 +31,8 @@ impl Generator for Bash {
for i in ${{COMP_WORDS[@]}}
do
- case \"${{i}}\" in
- \"$1\")
+ case \"${{cmd}},${{i}}\" in
+ \",$1\")
cmd=\"{cmd}\"
;;{subcmds}
*)
@@ -75,26 +75,52 @@ complete -F _{name} -o bashdefault -o default {name}
fn all_subcommands(cmd: &Command) -> String {
debug!("all_subcommands");
- let mut subcmds = vec![String::new()];
- let mut scs = utils::all_subcommands(cmd)
- .iter()
- .map(|x| x.0.clone())
- .collect::<Vec<_>>();
-
- scs.sort();
- scs.dedup();
+ fn add_command(
+ parent_fn_name: &str,
+ cmd: &Command,
+ subcmds: &mut Vec<(String, String, String)>,
+ ) {
+ let fn_name = format!(
+ "{parent_fn_name}__{cmd_name}",
+ parent_fn_name = parent_fn_name,
+ cmd_name = cmd.get_name().to_string().replace('-', "__")
+ );
+ subcmds.push((
+ parent_fn_name.to_string(),
+ cmd.get_name().to_string(),
+ fn_name.clone(),
+ ));
+ for alias in cmd.get_visible_aliases() {
+ subcmds.push((
+ parent_fn_name.to_string(),
+ alias.to_string(),
+ fn_name.clone(),
+ ));
+ }
+ for subcmd in cmd.get_subcommands() {
+ add_command(&fn_name, subcmd, subcmds);
+ }
+ }
+ let mut subcmds = vec![];
+ let fn_name = cmd.get_name().replace('-', "__");
+ for subcmd in cmd.get_subcommands() {
+ add_command(&fn_name, subcmd, &mut subcmds);
+ }
+ subcmds.sort();
- subcmds.extend(scs.iter().map(|sc| {
- format!(
- "{name})
- cmd+=\"__{fn_name}\"
+ let mut cases = vec![String::new()];
+ for (parent_fn_name, name, fn_name) in subcmds {
+ cases.push(format!(
+ "{parent_fn_name},{name})
+ cmd=\"{fn_name}\"
;;",
- name = sc,
- fn_name = sc.replace('-', "__")
- )
- }));
+ parent_fn_name = parent_fn_name,
+ name = name,
+ fn_name = fn_name,
+ ));
+ }
- subcmds.join("\n ")
+ cases.join("\n ")
}
fn subcommand_details(cmd: &Command) -> String {
@@ -125,9 +151,9 @@ fn subcommand_details(cmd: &Command) -> String {
return 0
;;",
subcmd = sc.replace('-', "__"),
- sc_opts = all_options_for_path(cmd, &*sc),
+ sc_opts = all_options_for_path(cmd, sc),
level = sc.split("__").map(|_| 1).sum::<u64>(),
- opts_details = option_details_for_path(cmd, &*sc)
+ opts_details = option_details_for_path(cmd, sc)
)
}));
@@ -174,12 +200,12 @@ fn option_details_for_path(cmd: &Command, path: &str) -> String {
fn vals_for(o: &Arg) -> String {
debug!("vals_for: o={}", o.get_id());
- if let Some(vals) = o.get_possible_values() {
+ if let Some(vals) = crate::generator::utils::possible_values(o) {
format!(
"$(compgen -W \"{}\" -- \"${{cur}}\")",
vals.iter()
- .filter(|pv| pv.is_hide_set())
- .map(PossibleValue::get_name)
+ .filter(|pv| !pv.is_hide_set())
+ .map(|n| n.get_name())
.collect::<Vec<_>>()
.join(" ")
)
@@ -201,7 +227,7 @@ fn all_options_for_path(cmd: &Command, path: &str) -> String {
write!(&mut opts, "--{} ", long).unwrap();
}
for pos in p.get_positionals() {
- if let Some(vals) = pos.get_possible_values() {
+ if let Some(vals) = utils::possible_values(pos) {
for value in vals {
write!(&mut opts, "{} ", value.get_name()).unwrap();
}