Skip to content

Commit

Permalink
refactor(complete): Pull our registration writing
Browse files Browse the repository at this point in the history
  • Loading branch information
epage committed Oct 2, 2024
1 parent 95e99ef commit e90b2da
Showing 1 changed file with 32 additions and 19 deletions.
51 changes: 32 additions & 19 deletions clap_complete/src/env/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,26 +230,8 @@ impl<'s, F: Fn() -> clap::Command> CompleteEnv<'s, F> {
.unwrap_or(args.len());
args.drain(0..escape_index);
if args.is_empty() {
let name = cmd.get_name();
let bin = self
.bin
.as_deref()
.or_else(|| cmd.get_bin_name())
.unwrap_or_else(|| cmd.get_name());
let completer = if let Some(completer) = self.completer.as_deref() {
completer.to_owned()
} else {
let mut completer = std::path::PathBuf::from(completer);
if let Some(current_dir) = current_dir {
if 1 < completer.components().count() {
completer = current_dir.join(completer);
}
}
completer.to_string_lossy().into_owned()
};

let mut buf = Vec::new();
shell.write_registration(self.var, name, bin, &completer, &mut buf)?;
self.write_registration(&cmd, current_dir, shell, completer, &mut buf)?;
std::io::stdout().write_all(&buf)?;
} else {
let mut buf = Vec::new();
Expand Down Expand Up @@ -284,6 +266,37 @@ impl<'s, F: Fn() -> clap::Command> CompleteEnv<'s, F> {
})?;
Ok(shell)
}

fn write_registration(
&self,
cmd: &clap::Command,
current_dir: Option<&std::path::Path>,
shell: &dyn EnvCompleter,
completer: OsString,
buf: &mut dyn std::io::Write,
) -> Result<(), std::io::Error> {
let name = cmd.get_name();
let bin = self
.bin
.as_deref()
.or_else(|| cmd.get_bin_name())
.unwrap_or_else(|| cmd.get_name());
let completer = if let Some(completer) = self.completer.as_deref() {
completer.to_owned()
} else {
let mut completer = std::path::PathBuf::from(completer);
if let Some(current_dir) = current_dir {
if 1 < completer.components().count() {
completer = current_dir.join(completer);
}
}
completer.to_string_lossy().into_owned()
};

shell.write_registration(self.var, name, bin, &completer, buf)?;

Ok(())
}
}

/// Collection of shell-specific completers
Expand Down

0 comments on commit e90b2da

Please sign in to comment.