Browse Source

refactor(kubectl): standarize completion generation

Carlo Sala 1 year ago
parent
commit
658eb01d82
1 changed files with 12 additions and 10 deletions
  1. 12 10
      plugins/kubectl/kubectl.plugin.zsh

+ 12 - 10
plugins/kubectl/kubectl.plugin.zsh

@@ -1,15 +1,17 @@
-if (( $+commands[kubectl] )); then
-  # If the completion file does not exist, generate it and then source it
-  # Otherwise, source it and regenerate in the background
-  if [[ ! -f "$ZSH_CACHE_DIR/completions/_kubectl" ]]; then
-    kubectl completion zsh | tee "$ZSH_CACHE_DIR/completions/_kubectl" >/dev/null
-    source "$ZSH_CACHE_DIR/completions/_kubectl"
-  else
-    source "$ZSH_CACHE_DIR/completions/_kubectl"
-    kubectl completion zsh | tee "$ZSH_CACHE_DIR/completions/_kubectl" >/dev/null &|
-  fi
+if (( ! $+commands[kubectl] )); then
+  return
 fi
 
+# If the completion file doesn't exist yet, we need to autoload it and
+# bind it to `kubectl`. Otherwise, compinit will have already done that.
+if [[ ! -f "$ZSH_CACHE_DIR/completions/_kubectl" ]]; then
+  typeset -g -A _comps
+  autoload -Uz _kubectl
+  _comps[kubectl]=_kubectl
+fi
+
+kubectl completion zsh >| "$ZSH_CACHE_DIR/completions/_kubectl" &|
+
 # This command is used a LOT both below and in daily life
 alias k=kubectl