Browse Source

feat(asdf): load zsh completions instead of bash ones

Closes #11143
Closes #8779

Co-authored-by: Carlo Sala <carlosalag@protonmail.com>
Thomas Faugier 7 months ago
parent
commit
278bcfc93b
1 changed files with 19 additions and 16 deletions
  1. 19 16
      plugins/asdf/asdf.plugin.zsh

+ 19 - 16
plugins/asdf/asdf.plugin.zsh

@@ -2,26 +2,29 @@
 ASDF_DIR="${ASDF_DIR:-$HOME/.asdf}"
 ASDF_COMPLETIONS="$ASDF_DIR/completions"
 
-# If not found, check for archlinux/AUR package (/opt/asdf-vm/)
-if [[ ! -f "$ASDF_DIR/asdf.sh" || ! -f "$ASDF_COMPLETIONS/asdf.bash" ]] && [[ -f "/opt/asdf-vm/asdf.sh" ]]; then
-  ASDF_DIR="/opt/asdf-vm"
-  ASDF_COMPLETIONS="$ASDF_DIR"
-fi
-
-# If not found, check for Homebrew package
-if [[ ! -f "$ASDF_DIR/asdf.sh" || ! -f "$ASDF_COMPLETIONS/asdf.bash" ]] && (( $+commands[brew] )); then
-  brew_prefix="$(brew --prefix asdf)"
-  ASDF_DIR="${brew_prefix}/libexec"
-  ASDF_COMPLETIONS="${brew_prefix}/etc/bash_completion.d"
-  unset brew_prefix
+if [[ ! -f "$ASDF_DIR/asdf.sh" || ! -f "$ASDF_COMPLETIONS/_asdf" ]]; then
+  # If not found, check for archlinux/AUR package (/opt/asdf-vm/)
+  if [[ -f "/opt/asdf-vm/asdf.sh" ]]; then
+    ASDF_DIR="/opt/asdf-vm"
+    ASDF_COMPLETIONS="$ASDF_DIR"
+  # If not found, check for Homebrew package
+  elif (( $+commands[brew] )); then
+    _ASDF_PREFIX="$(brew --prefix asdf)"
+    ASDF_DIR="${_ASDF_PREFIX}/libexec"
+    ASDF_COMPLETIONS="${_ASDF_PREFIX}/share/zsh/site-functions"
+    unset _ASDF_PREFIX
+  else
+    return
+  fi
 fi
 
 # Load command
 if [[ -f "$ASDF_DIR/asdf.sh" ]]; then
-  . "$ASDF_DIR/asdf.sh"
-
+  source "$ASDF_DIR/asdf.sh"
   # Load completions
-  if [[ -f "$ASDF_COMPLETIONS/asdf.bash" ]]; then
-    . "$ASDF_COMPLETIONS/asdf.bash"
+  if [[ -f "$ASDF_COMPLETIONS/_asdf" ]]; then
+    fpath+=("$ASDF_COMPLETIONS")
+    autoload -Uz _asdf
+    compdef _asdf asdf # compdef is already loaded before loading plugins
   fi
 fi