diff --git a/clap_complete/src/env/mod.rs b/clap_complete/src/env/mod.rs index 69e0b1d7233..aa5a7964a77 100644 --- a/clap_complete/src/env/mod.rs +++ b/clap_complete/src/env/mod.rs @@ -295,6 +295,11 @@ pub trait EnvCompleter { /// Write the `buf` the logic needed for calling into `= --`, passing needed /// arguments to [`EnvCompleter::write_complete`] through the environment. /// + /// - `var`: see [`CompleteEnv::var`] + /// - `name`: an identifier to use in the script + /// - `bin`: the binary being completed + /// - `completer`: the command to run to generate completions + /// /// **WARNING:** There are no stability guarantees between the call to /// [`EnvCompleter::write_complete`] that this generates and actually calling [`EnvCompleter::write_complete`]. /// Caching the results of this call may result in invalid or no completions to be generated. diff --git a/clap_complete/src/env/shells.rs b/clap_complete/src/env/shells.rs index 1b71c8dd0ee..521cb43e99f 100644 --- a/clap_complete/src/env/shells.rs +++ b/clap_complete/src/env/shells.rs @@ -23,8 +23,6 @@ impl EnvCompleter for Bash { buf: &mut dyn std::io::Write, ) -> Result<(), std::io::Error> { let escaped_name = name.replace('-', "_"); - let mut upper_name = escaped_name.clone(); - upper_name.make_ascii_uppercase(); let completer = shlex::try_quote(completer).unwrap_or(std::borrow::Cow::Borrowed(completer)); @@ -61,7 +59,6 @@ fi .replace("NAME", &escaped_name) .replace("BIN", bin) .replace("COMPLETER", &completer) - .replace("UPPER", &upper_name) .replace("VAR", var); writeln!(buf, "{script}")?; @@ -341,17 +338,18 @@ impl EnvCompleter for Zsh { fn write_registration( &self, var: &str, - _name: &str, + name: &str, bin: &str, completer: &str, buf: &mut dyn std::io::Write, ) -> Result<(), std::io::Error> { + let escaped_name = name.replace('-', "_"); let bin = shlex::try_quote(bin).unwrap_or(std::borrow::Cow::Borrowed(bin)); let completer = shlex::try_quote(completer).unwrap_or(std::borrow::Cow::Borrowed(completer)); let script = r#"#compdef BIN -function _clap_dynamic_completer() { +function _clap_dynamic_completer_NAME() { local _CLAP_COMPLETE_INDEX=$(expr $CURRENT - 1) local _CLAP_IFS=$'\n' @@ -367,7 +365,8 @@ function _clap_dynamic_completer() { fi } -compdef _clap_dynamic_completer BIN"# +compdef _clap_dynamic_completer_NAME BIN"# + .replace("NAME", &escaped_name) .replace("COMPLETER", &completer) .replace("BIN", &bin) .replace("VAR", var); diff --git a/clap_complete/tests/snapshots/home/dynamic-env/exhaustive/zsh/zsh/_exhaustive b/clap_complete/tests/snapshots/home/dynamic-env/exhaustive/zsh/zsh/_exhaustive index b280f7c62e0..e59950fc841 100644 --- a/clap_complete/tests/snapshots/home/dynamic-env/exhaustive/zsh/zsh/_exhaustive +++ b/clap_complete/tests/snapshots/home/dynamic-env/exhaustive/zsh/zsh/_exhaustive @@ -1,5 +1,5 @@ #compdef exhaustive -function _clap_dynamic_completer() { +function _clap_dynamic_completer_exhaustive() { local _CLAP_COMPLETE_INDEX=$(expr $CURRENT - 1) local _CLAP_IFS=$'\n' @@ -15,4 +15,4 @@ function _clap_dynamic_completer() { fi } -compdef _clap_dynamic_completer exhaustive +compdef _clap_dynamic_completer_exhaustive exhaustive