mirror of
https://github.com/asdf-vm/asdf.git
synced 2024-12-29 14:21:02 -07:00
ebdb229ce6
Co-authored-by: Trevor Brown <Stratus3D@users.noreply.github.com>
101 lines
3.1 KiB
Bash
101 lines
3.1 KiB
Bash
_asdf_list_shims() (
|
|
# this function runs in a subshell so shopt is scoped
|
|
shopt -s nullglob # globs that don't match should disappear
|
|
shopt -u failglob # globs that don't match shouldn't fail
|
|
for shim in "${ASDF_DATA_DIR:-$HOME/.asdf}"/shims/*; do
|
|
basename "$shim"
|
|
done
|
|
)
|
|
|
|
_asdf() {
|
|
local cur
|
|
cur=${COMP_WORDS[COMP_CWORD]}
|
|
local cmd
|
|
cmd=${COMP_WORDS[1]}
|
|
local prev
|
|
prev=${COMP_WORDS[COMP_CWORD - 1]}
|
|
local plugins
|
|
plugins=$(asdf plugin-list 2>/dev/null | tr '\n' ' ')
|
|
|
|
# We can safely ignore warning SC2207 since it warns that it will uses the
|
|
# shell's sloppy word splitting and globbing. The possible commands here are
|
|
# all single words, and most likely won't contain special chars the shell will
|
|
# expand.
|
|
COMPREPLY=()
|
|
|
|
case "$cmd" in
|
|
plugin-update)
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "$plugins --all" -- "$cur"))
|
|
;;
|
|
plugin-remove | current)
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "$plugins" -- "$cur"))
|
|
;;
|
|
plugin-add)
|
|
local available_plugins
|
|
available_plugins=$(asdf plugin-list-all 2>/dev/null | awk '{ if ($2 !~ /^\*/) print $1}')
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "$available_plugins" -- "$cur"))
|
|
;;
|
|
install | list | list-all | help)
|
|
if [[ " $plugins " == *" $prev "* ]]; then
|
|
local versions
|
|
versions=$(asdf list-all "$prev" 2>/dev/null)
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "$versions" -- "$cur"))
|
|
else
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "$plugins" -- "$cur"))
|
|
fi
|
|
;;
|
|
update)
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "--head" -- "$cur"))
|
|
;;
|
|
uninstall | where | reshim)
|
|
if [[ " $plugins " == *" $prev "* ]]; then
|
|
local versions
|
|
# The first two columns are either blank or contain the "current" marker.
|
|
versions=$(asdf list "$prev" 2>/dev/null | colrm 1 2)
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "$versions" -- "$cur"))
|
|
else
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "$plugins" -- "$cur"))
|
|
fi
|
|
;;
|
|
local | global | shell)
|
|
if [[ " $plugins " == *" $prev "* ]]; then
|
|
local versions
|
|
# The first two columns are either blank or contain the "current" marker.
|
|
versions=$(asdf list "$prev" 2>/dev/null | colrm 1 2)
|
|
versions+=" system"
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "$versions" -- "$cur"))
|
|
else
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "$plugins" -- "$cur"))
|
|
fi
|
|
;;
|
|
latest)
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "--all" -- "$cur"))
|
|
;;
|
|
which | shim-versions)
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "$(_asdf_list_shims)" -- "$cur"))
|
|
;;
|
|
plugin-list | plugin-list-all | info) ;;
|
|
*)
|
|
local cmds='current global help install latest list list-all local plugin-add plugin-list plugin-list-all plugin-remove plugin-update reshim shim-versions shell uninstall update where which info'
|
|
# shellcheck disable=SC2207
|
|
COMPREPLY=($(compgen -W "$cmds" -- "$cur"))
|
|
;;
|
|
esac
|
|
|
|
return 0
|
|
}
|
|
|
|
complete -F _asdf asdf
|