summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/cargo/cargo.plugin.zsh35
1 files changed, 18 insertions, 17 deletions
diff --git a/plugins/cargo/cargo.plugin.zsh b/plugins/cargo/cargo.plugin.zsh
index 7082d2d55..9d1d23757 100644
--- a/plugins/cargo/cargo.plugin.zsh
+++ b/plugins/cargo/cargo.plugin.zsh
@@ -1,23 +1,24 @@
-if (( $+commands[rustup] && $+commands[cargo] )); then
- # remove old generated completion file
- command rm -f "${0:A:h}/_cargo"
-
- # generate new completion file
- ver="$(cargo --version)"
- ver_file="$ZSH_CACHE_DIR/cargo_version"
- comp_file="$ZSH_CACHE_DIR/completions/_cargo"
+if ! (( $+commands[rustup] && $+commands[cargo] )); then
+ return
+fi
- mkdir -p "${comp_file:h}"
- (( ${fpath[(Ie)${comp_file:h}]} )) || fpath=("${comp_file:h}" $fpath)
+# Remove old generated completion file
+# TODO: 2021-09-15: remove this line
+command rm -f "${0:A:h}/_cargo"
- if [[ ! -f "$comp_file" || ! -f "$ver_file" || "$ver" != "$(< "$ver_file")" ]]; then
- rustup completions zsh cargo >| "$comp_file"
- echo "$ver" >| "$ver_file"
- fi
+# Add completions/ folder in $ZSH_CACHE_DIR
+comp_file="$ZSH_CACHE_DIR/completions/_cargo"
+command mkdir -p "${comp_file:h}"
+(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
- declare -A _comps
+# If the completion file doesn't exist yet, we need to autoload it and
+# bind it to `cargo`. Otherwise, compinit will have already done that
+if [[ ! -f "$comp_file" ]]; then
autoload -Uz _cargo
+ declare -A _comps
_comps[cargo]=_cargo
-
- unset ver ver_file comp_file
fi
+
+# Generate completion file in the background
+rustup completions zsh cargo >| "$comp_file" &|
+unset comp_file