Skip to content

Commit

Permalink
docs(complete): Clarify CompleteEnv's Shell trait
Browse files Browse the repository at this point in the history
  • Loading branch information
epage committed Sep 17, 2024
1 parent 5ca60e9 commit c92fca3
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 8 deletions.
5 changes: 5 additions & 0 deletions clap_complete/src/env/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,11 @@ pub trait EnvCompleter {
/// Write the `buf` the logic needed for calling into `<VAR>=<shell> <cmd> --`, 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.
Expand Down
11 changes: 5 additions & 6 deletions clap_complete/src/env/shells.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down Expand Up @@ -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}")?;
Expand Down Expand Up @@ -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'
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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'

Expand All @@ -15,4 +15,4 @@ function _clap_dynamic_completer() {
fi
}

compdef _clap_dynamic_completer exhaustive
compdef _clap_dynamic_completer_exhaustive exhaustive

0 comments on commit c92fca3

Please sign in to comment.