Browse Source

refactor(kubectl): optimize completion generation

Marc Cornellà 2 years ago
parent
commit
7ae4f76f6d
1 changed files with 24 additions and 14 deletions
  1. 24 14
      plugins/kubectl/kubectl.plugin.zsh

+ 24 - 14
plugins/kubectl/kubectl.plugin.zsh

@@ -1,13 +1,22 @@
 if (( $+commands[kubectl] )); then
-    __KUBECTL_COMPLETION_FILE="${ZSH_CACHE_DIR}/kubectl_completion"
-
-    if [[ ! -f $__KUBECTL_COMPLETION_FILE || ! -s $__KUBECTL_COMPLETION_FILE ]]; then
-        kubectl completion zsh >! $__KUBECTL_COMPLETION_FILE
-    fi
-
-    [[ -f $__KUBECTL_COMPLETION_FILE ]] && source $__KUBECTL_COMPLETION_FILE
-
-    unset __KUBECTL_COMPLETION_FILE
+  # TODO: 2022-01-05: remove this block
+  # remove old generated files
+  command rm -f "$ZSH_CACHE_DIR/kubectl_completion"
+
+  # TODO: 2022-01-05: remove this bit of code as it exists in oh-my-zsh.sh
+  # Add completions folder in $ZSH_CACHE_DIR
+  command mkdir -p "$ZSH_CACHE_DIR/completions"
+  (( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
+
+  # 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" &|
 fi
 
 # This command is used a LOT both below and in daily life
@@ -97,8 +106,9 @@ alias kdd='kubectl describe deployment'
 alias kdeld='kubectl delete deployment'
 alias ksd='kubectl scale deployment'
 alias krsd='kubectl rollout status deployment'
-kres(){
-    kubectl set env $@ REFRESHED_AT=$(date +%Y%m%d%H%M%S)
+
+function kres(){
+  kubectl set env $@ REFRESHED_AT=$(date +%Y%m%d%H%M%S)
 }
 
 # Rollout management.
@@ -170,9 +180,9 @@ alias kdelcj='kubectl delete cronjob'
 
 # Only run if the user actually has kubectl installed
 if (( ${+_comps[kubectl]} )); then
-  kj() { kubectl "$@" -o json | jq; }
-  kjx() { kubectl "$@" -o json | fx; }
-  ky() { kubectl "$@" -o yaml | yh; }
+  function kj() { kubectl "$@" -o json | jq; }
+  function kjx() { kubectl "$@" -o json | fx; }
+  function ky() { kubectl "$@" -o yaml | yh; }
 
   compdef kj=kubectl
   compdef kjx=kubectl