summaryrefslogtreecommitdiff
path: root/oh-my-zsh/plugins/rust/rust.plugin.zsh
diff options
context:
space:
mode:
Diffstat (limited to 'oh-my-zsh/plugins/rust/rust.plugin.zsh')
-rw-r--r--oh-my-zsh/plugins/rust/rust.plugin.zsh26
1 files changed, 26 insertions, 0 deletions
diff --git a/oh-my-zsh/plugins/rust/rust.plugin.zsh b/oh-my-zsh/plugins/rust/rust.plugin.zsh
new file mode 100644
index 0000000..858f141
--- /dev/null
+++ b/oh-my-zsh/plugins/rust/rust.plugin.zsh
@@ -0,0 +1,26 @@
+if ! (( $+commands[rustup] && $+commands[cargo] )); then
+ return
+fi
+
+# 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 "$ZSH_CACHE_DIR/completions/_cargo" ]]; then
+ autoload -Uz _cargo
+ typeset -g -A _comps
+ _comps[cargo]=_cargo
+fi
+
+# If the completion file doesn't exist yet, we need to autoload it and
+# bind it to `rustup`. Otherwise, compinit will have already done that
+if [[ ! -f "$ZSH_CACHE_DIR/completions/_rustup" ]]; then
+ autoload -Uz _rustup
+ typeset -g -A _comps
+ _comps[rustup]=_rustup
+fi
+
+# Generate completion files in the background
+rustup completions zsh >| "$ZSH_CACHE_DIR/completions/_rustup" &|
+cat >| "$ZSH_CACHE_DIR/completions/_cargo" <<'EOF'
+#compdef cargo
+source "$(rustc +${${(z)$(rustup default)}[1]} --print sysroot)"/share/zsh/site-functions/_cargo
+EOF