bash-it/vendor/github.com/dsifford/yarn-completion/yarn

1208 lines
19 KiB
Plaintext

# shellcheck shell=bash disable=2207
# vim: set fdm=syntax fdl=0:
#
# Version: 0.17.0
# Yarn Version: 1.22.11
#
# bash completion for Yarn (https://github.com/yarnpkg/yarn)
#
# To enable on-demand completion loading, copy this file to one of the following locations:
# - $BASH_COMPLETION_USER_DIR/completions/yarn
# or
# - $XDG_DATA_HOME/bash-completion/completions/yarn
# or
# - ~/.local/share/bash-completion/completions/yarn
#
###
# Parses and extracts data from package.json files.
#
# Usage:
# __yarn_get_package_fields [-g] [-t FIELDTYPE] <field-key>
#
# Options:
# -g Parse global package.json file, if available
# -t FIELDTYPE The field type being parsed (array|boolean|number|object|string) [default: object]
#
# Notes:
# If FIELDTYPE is object, then the object keys are returned.
# If FIELDTYPE is array, boolean, number, or string, then the field values are returned.
# <field-key> must be a first-level field in the json file.
##
__yarn_get_package_fields() {
declare cwd=$PWD field_type=object field_key opt package_dot_json OPTIND OPTARG
while [[ -n $cwd ]]; do
if [[ -f "$cwd/package.json" ]]; then
package_dot_json="$cwd/package.json"
break
fi
cwd="${cwd%/*}"
done
while getopts ":gt:" opt; do
case $opt in
g)
if [[ -f $HOME/.config/yarn/global/package.json ]]; then
package_dot_json="$HOME/.config/yarn/global/package.json"
elif [[ -f $HOME/.local/share/yarn/global/package.json ]]; then
package_dot_json="$HOME/.local/share/yarn/global/package.json"
elif [[ -f $HOME/.yarn/global/package.json ]]; then
package_dot_json="$HOME/.yarn/global/package.json"
else
package_dot_json=""
fi
;;
t)
case "$OPTARG" in
array | boolean | number | object | string)
field_type="$OPTARG"
;;
esac
;;
*) ;;
esac
done
shift $((OPTIND - 1))
field_key='"'$1'"'
[[ ! -f $package_dot_json || ! $field_key ]] && return
case "$field_type" in
object)
sed -n '/'"$field_key"':[[:space:]]*{/,/^[[:space:]]*}/{
# exclude start and end patterns
//!{
# extract the text between the first pair of double quotes
s/^[[:space:]]*"\([^"]*\).*/\1/p
}
}' "$package_dot_json"
;;
array)
sed -n '/'"$field_key"':[[:space:]]*\[/,/^[[:space:]]*]/{
# exclude start and end patterns
//!{
# extract the text between the first pair of double quotes
s/^[[:space:]]*"\([^"]*\).*/\1/p
}
}' "$package_dot_json"
;;
boolean | number)
sed -n 's/[[:space:]]*'"$field_key"':[[:space:]]*\([a-z0-9]*\)/\1/p' "$package_dot_json"
;;
string)
sed -n 's/[[:space:]]*'"$field_key"':[[:space:]]*"\(.*\)".*/\1/p' "$package_dot_json"
;;
esac
}
###
# Count all command arguments starting at a given depth, excluding flags and
# flag arguments.
#
# Usage:
# __yarn_count_args [-d INT]
#
# Options:
# -d INT The start depth to begin counting [default: 0]
#
# Globals:
# *args
# cword
##
__yarn_count_args() {
args=0
declare -i counter=0 depth=0
declare arg_flag_pattern opt OPTIND
arg_flag_pattern="@($(tr ' ' '|' <<< "${arg_flags[*]}"))"
while getopts ":d:" opt; do
case $opt in
d)
depth=$OPTARG
;;
*) ;;
esac
done
shift $((OPTIND - 1))
while ((counter < cword)); do
case ${words[counter]} in
-* | =) ;;
*)
# shellcheck disable=SC2053
if [[ ${words[counter - 1]} != $arg_flag_pattern ]]; then
if ((depth-- <= 0)); then
((args++))
fi
fi
;;
esac
((counter++))
done
}
###
# Retrieves the command or subcommand at a given depth, or the last occurring
# command or subcommand before the cursor location if no depth is given, or if
# depth exceeds cursor location.
#
# Usage:
# __yarn_get_command [-d INT]
#
# Options:
# -d INT Depth of command to retrieve.
#
# Globals:
# *cmd
# commands
# cword
# subcommands
# words
##
__yarn_get_command() {
declare -i counter=0 cmd_depth=0 OPTIND
declare cmdlist word opt
while getopts ":d:" opt; do
case $opt in
d)
cmd_depth="$OPTARG"
;;
*) ;;
esac
done
shift $((OPTIND - 1))
cmdlist="@($(tr ' ' '|' <<< "${commands[*]} ${subcommands[*]}"))"
cmd=yarn
while ((counter < cword)); do
word="${words[counter]}"
case "$word" in
$cmdlist)
cmd="$word"
((--cmd_depth == 0)) && break
;;
esac
((counter++))
done
}
###
# Global fallback completion generator if all else fails.
#
# Usage:
# __yarn_fallback
#
# Globals:
# cur
##
__yarn_fallback() {
case "$cur" in
-*)
COMPREPLY=($(compgen -W "$(__yarn_flags)" -- "$cur"))
;;
*)
COMPREPLY=($(compgen -o plusdirs -f -- "$cur"))
;;
esac
}
###
# Process and merge local and global flags after removing the flags that
# have already been used.
#
# Usage:
# __yarn_flags
#
# Globals:
# flags
# global_flags
# words
##
__yarn_flags() {
declare word
declare -a existing_flags=()
for word in "${words[@]}"; do
case "$word" in
-*)
existing_flags+=("$word")
;;
esac
done
LC_ALL=C comm -23 \
<(echo "${flags[@]}" "${global_flags[@]}" | tr ' ' '\n' | LC_ALL=C sort -u) \
<(echo "${existing_flags[@]}" | tr ' ' '\n' | LC_ALL=C sort -u)
}
###
# Handles completions for flags that require, or optionally take, arguments.
#
# Usage:
# __yarn_flag_args
#
# Globals:
# cur
# prev
##
__yarn_flag_args() {
declare {arg,bool,dir,file,int,special}_flag_pattern
arg_flag_pattern="@($(tr ' ' '|' <<< "${arg_flags[*]}"))"
# shellcheck disable=SC2053
if [[ $prev != $arg_flag_pattern ]]; then
return 1
fi
bool_flag_pattern="@($(tr ' ' '|' <<< "${bool_arg_flags[*]}"))"
dir_flag_pattern="@($(tr ' ' '|' <<< "${dir_arg_flags[*]}"))"
file_flag_pattern="@($(tr ' ' '|' <<< "${file_arg_flags[*]}"))"
int_flag_pattern="@($(tr ' ' '|' <<< "${int_arg_flags[*]}"))"
special_flag_pattern="@($(tr ' ' '|' <<< "${special_arg_flags[*]}"))"
case "$prev" in
$bool_flag_pattern)
COMPREPLY=($(compgen -W 'true false' -- "$cur"))
;;
$dir_flag_pattern)
compopt -o dirnames
;;
$file_flag_pattern)
compopt -o default -o filenames
;;
$int_flag_pattern)
compopt -o nospace
COMPREPLY=($(compgen -W '{0..9}' -- "$cur"))
;;
$special_flag_pattern)
case "$prev" in
--access)
COMPREPLY=($(compgen -W 'public restricted' -- "$cur"))
;;
--groups)
COMPREPLY=($(compgen -W 'dependencies devDependencies optionalDependencies' -- "$cur"))
;;
--level)
COMPREPLY=($(compgen -W 'info low moderate high critical' -- "$cur"))
;;
--network-timeout)
compopt -o nospace
COMPREPLY=($(compgen -W '{1000..10000..1000}' -- "$cur"))
;;
esac
;;
esac
return 0
}
_yarn_add() {
((depth++))
flags=(
--audit -A
--dev -D
--exact -E
--optional -O
--peer -P
--tilde -T
--ignore-workspace-root-check -W
)
return 1
}
_yarn_audit() {
((depth++))
flags=(
--groups
--level
--summary
)
return 1
}
_yarn_autoclean() {
((depth++))
flags=(
--force -F
--init -I
)
return 1
}
_yarn_cache() {
((depth++))
declare cmd
flags=(
--pattern
)
subcommands=(
clean
dir
list
)
__yarn_get_command
case "$cmd" in
cache)
case "$cur" in
-*)
return 1
;;
*)
COMPREPLY=($(compgen -W "${subcommands[*]}" -- "$cur"))
return 0
;;
esac
;;
*)
return 1
;;
esac
}
_yarn_check() {
((depth++))
flags=(
--integrity
--verify-tree
)
return 1
}
_yarn_config() {
((depth++))
declare cmd
declare subcommands=(
delete
get
list
set
)
declare known_keys=(
ignore-optional
ignore-platform
ignore-scripts
init-author-email
init-author-name
init-author-url
init-license
init-version
no-progress
prefix
registry
save-prefix
user-agent
version-git-message
version-git-sign
version-git-tag
version-tag-prefix
)
__yarn_get_command
case "$cmd" in
get | delete)
case "$cur" in
-*) ;;
*)
if [[ $prev == @(get|delete) ]]; then
COMPREPLY=($(compgen -W "${known_keys[*]}" -- "$cur"))
return 0
fi
;;
esac
;;
set)
case "$cur" in
-*)
flags=(
--global
)
;;
*)
if [[ $prev == set ]]; then
COMPREPLY=($(compgen -W "${known_keys[*]}" -- "$cur"))
return 0
fi
;;
esac
;;
config)
case "$cur" in
-*) ;;
*)
COMPREPLY=($(compgen -W "${subcommands[*]}" -- "$cur"))
return 0
;;
esac
;;
esac
return 1
}
_yarn_create() {
((depth++))
declare -i args
case "$cur" in
-*) ;;
*)
__yarn_count_args -d $depth
((args == 0)) && return 0
;;
esac
return 1
}
_yarn_generate_lock_entry() {
((depth++))
flags=(
--resolved
--use-manifest
)
return 1
}
_yarn_global() {
((depth++))
declare cmd cmdlist
flags=(
--latest
--prefix
)
subcommands=(
add
bin
list
remove
upgrade
upgrade-interactive
)
cmdlist="@($(tr ' ' '|' <<< "${subcommands[*]}"))"
__yarn_get_command -d 3
case "$cur" in
-*) ;;
*)
case "$cmd" in
$cmdlist)
"_yarn_${cmd//-/_}" 2> /dev/null
return $?
;;
global)
COMPREPLY=($(compgen -W "${subcommands[*]}" -- "$cur"))
return 0
;;
esac
;;
esac
return 1
}
_yarn_help() {
((depth++))
declare -i args
case "$cur" in
-*) ;;
*)
__yarn_count_args -d $depth
if ((args == 0)); then
COMPREPLY=($(compgen -W "${commands[*]}" -- "$cur"))
return 0
fi
;;
esac
return 1
}
_yarn_info() {
((depth++))
flags=(
--json
)
declare standard_fields=(
author
bin
bugs
contributors
dependencies
description
devDependencies
dist-tags
engines
files
homepage
keywords
license
main
maintainers
name
optionalDependencies
peerDependencies
repository
version
versions
)
declare -i args
__yarn_count_args -d $depth
case "$cur" in
-*) ;;
*)
case "$args" in
0)
COMPREPLY=(
$(compgen -W "
$(__yarn_get_package_fields dependencies)
$(__yarn_get_package_fields devDependencies)
" -- "$cur")
)
return 0
;;
1)
COMPREPLY=($(compgen -W "${standard_fields[*]}" -- "$cur"))
return 0
;;
esac
;;
esac
return 1
}
_yarn_init() {
((depth++))
flags=(
--yes -y
--private -p
--install -i
)
return 1
}
_yarn_install() {
((depth++))
flags=(
--audit -A
)
return 1
}
_yarn_licenses() {
((depth++))
declare cmd
subcommands=(
list
generate-disclaimer
)
case "$cur" in
-*) ;;
*)
__yarn_get_command
case "$cmd" in
licenses)
COMPREPLY=($(compgen -W "${subcommands[*]}" -- "$cur"))
return 0
;;
esac
;;
esac
return 1
}
_yarn_list() {
((depth++))
flags=(
--depth
--pattern
)
return 1
}
_yarn_node() {
((depth++))
flags=(
--into
)
return 1
}
_yarn_outdated() {
((depth++))
case "$cur" in
-*) ;;
*)
COMPREPLY=(
$(compgen -W "
$(__yarn_get_package_fields dependencies)
$(__yarn_get_package_fields devDependencies)
" -- "$cur")
)
return 0
;;
esac
return 1
}
_yarn_owner() {
((depth++))
declare cmd
subcommands=(
add
list
remove
)
__yarn_get_command
if [[ $cmd == owner ]]; then
case "$cur" in
-*) ;;
*)
COMPREPLY=($(compgen -W "${subcommands[*]}" -- "$cur"))
return 0
;;
esac
fi
return 1
}
_yarn_pack() {
((depth++))
flags=(
--filename -f
)
return 1
}
_yarn_policies() {
((depth++))
declare standard_policies=(
latest
nightly
rc
)
declare -i args
__yarn_count_args -d $depth
case "$cur" in
-*) ;;
*)
case "$args" in
0)
COMPREPLY=($(compgen -W "${standard_policies[*]}" -- "$cur"))
return 0
;;
esac
;;
esac
return 1
}
_yarn_publish() {
((depth++))
flags=(
--access
--major
--message
--minor
--new-version
--no-commit-hooks
--no-git-tag-version
--patch
--preid
--premajor
--preminor
--prepatch
--prerelease
--tag
)
return 1
}
_yarn_remove() {
((depth++))
declare cmd dependencies devDependencies
flags=(
--ignore-workspace-root-check -W
)
__yarn_get_command -d 1
case "$cmd" in
global)
dependencies=$(__yarn_get_package_fields -g dependencies)
devDependencies=''
;;
remove)
dependencies=$(__yarn_get_package_fields dependencies)
devDependencies=$(__yarn_get_package_fields devDependencies)
;;
*)
return 1
;;
esac
case "$cur" in
-*) ;;
*)
COMPREPLY=($(compgen -W "$dependencies $devDependencies" -- "$cur"))
return 0
;;
esac
return 1
}
_yarn_run() {
((depth++))
declare cmd
subcommands=(
env
$(__yarn_get_package_fields scripts)
)
__yarn_get_command
if [[ $cmd == run ]]; then
case "$cur" in
-*) ;;
*)
COMPREPLY=($(compgen -W "${subcommands[*]}" -- "$cur"))
return 0
;;
esac
fi
return 1
}
_yarn_tag() {
((depth++))
declare cmd
subcommands=(
add
list
remove
)
__yarn_get_command
case "$cmd" in
tag)
case "$cur" in
-*) ;;
*)
COMPREPLY=($(compgen -W "${subcommands[*]}" -- "$cur"))
return 0
;;
esac
;;
esac
return 1
}
_yarn_team() {
((depth++))
declare cmd
subcommands=(
add
create
destroy
list
remove
)
__yarn_get_command
case "$cmd" in
team)
case "$cur" in
-*) ;;
*)
COMPREPLY=($(compgen -W "${subcommands[*]}" -- "$cur"))
return 0
;;
esac
;;
esac
return 1
}
_yarn_unplug() {
((depth++))
flags=(
--clear
--clear-all
)
case "$cur" in
-*) ;;
*)
COMPREPLY=(
$(compgen -W "
$(__yarn_get_package_fields dependencies)
$(__yarn_get_package_fields devDependencies)
" -- "$cur")
)
return 0
;;
esac
return 1
}
_yarn_upgrade() {
((depth++))
declare cmd dependencies devDependencies
flags=(
--audit -A
--caret -C
--exact -E
--latest -L
--pattern -P
--scope -S
--tilde -T
)
__yarn_get_command -d 1
case "$cmd" in
global)
dependencies=$(__yarn_get_package_fields -g dependencies)
devDependencies=''
;;
upgrade)
dependencies=$(__yarn_get_package_fields dependencies)
devDependencies=$(__yarn_get_package_fields devDependencies)
;;
*)
return 1
;;
esac
case "$cur" in
-*) ;;
*)
COMPREPLY=($(compgen -W "$dependencies $devDependencies" -- "$cur"))
return 0
;;
esac
return 1
}
_yarn_upgrade_interactive() {
((depth++))
flags=(
--caret -C
--exact -E
--latest
--scope -S
--tilde -T
)
return 1
}
_yarn_version() {
((depth++))
flags=(
--major
--message
--minor
--new-version
--no-commit-hooks
--no-git-tag-version
--patch
--preid
--premajor
--preminor
--prepatch
--prerelease
)
return 1
}
_yarn_workspace() {
((depth++))
declare -i args
declare workspaces_info
case "$cur" in
-*) ;;
*)
__yarn_count_args
case "$args" in
[0-2])
workspaces_info=$(yarn workspaces info -s 2> /dev/null)
if [[ -n $workspaces_info ]]; then
mapfile -t < <(
sed -n 's/^ \{2\}"\([^"]*\)": {$/\1/p' <<< "$workspaces_info"
)
COMPREPLY=($(compgen -W "${MAPFILE[*]}" -- "$cur"))
fi
return 0
;;
3)
COMPREPLY=($(compgen -W "${commands[*]}" -- "$cur"))
return 0
;;
*)
declare cmd
workspaces_info=$(yarn workspaces info -s 2> /dev/null)
if [[ -n $workspaces_info ]]; then
PWD=$(
sed -n '/^ \{2\}"'"${COMP_WORDS[2]}"'": {$/,/^ \{2\}},\{0,1\}$/{
s/^ \{4\}"location": "\([^"]*\)",$/\1/p
}' <<< "$workspaces_info"
)
fi
__yarn_get_command -d 3
"_yarn_${cmd//-/_}" 2> /dev/null
return $?
;;
esac
;;
esac
return 1
}
_yarn_workspaces() {
((depth++))
declare cmd
subcommands=(
info
run
)
__yarn_get_command -d 4
case "$cmd" in
workspaces)
case "$cur" in
-*) ;;
*)
COMPREPLY=($(compgen -W "${subcommands[*]}" -- "$cur"))
return 0
;;
esac
;;
info)
return 0
;;
run)
__yarn_run
return 0
;;
esac
return 1
}
_yarn_why() {
((depth++))
case "$cur" in
-*) ;;
./*)
compopt -o filenames
;;
*)
declare modules
modules=$(yarn list --depth 0 | sed -n 's/.* \([a-zA-Z0-9@].*\)@.*/\1/p') || return 1
COMPREPLY=($(compgen -W "$modules" -- "$cur"))
return 0
;;
esac
return 1
}
_yarn_yarn() {
((depth++))
case "$cur" in
-*) ;;
*)
COMPREPLY=($(compgen -W "${commands[*]}" -- "$cur"))
return 0
;;
esac
return 1
}
_yarn() {
# shellcheck disable=SC2064
trap "
PWD=$PWD
$(shopt -p extglob)
set +o pipefail
" RETURN
shopt -s extglob
set -o pipefail
declare cur cmd prev
declare -a words
declare -i cword counter=1 depth=1
declare -ar commands=(
access
add
audit
autoclean
bin
cache
check
config
create
exec
generate-lock-entry
global
help
import
info
init
install
licenses
link
list
login
logout
node
outdated
owner
pack
policies
publish
remove
run
tag
team
unlink
unplug
upgrade
upgrade-interactive
version
versions
why
workspace
workspaces
$(__yarn_get_package_fields scripts)
)
declare -a subcommands=()
declare -ar bool_arg_flags=(
--emoji
--production --prod
--scripts-prepend-node-path
)
declare -ar dir_arg_flags=(
--cache-folder
--cwd
--global-folder
--into
--link-folder
--modules-folder
--preferred-cache-folder
--prefix
)
declare -ar file_arg_flags=(
--filename -f
--use-manifest
--use-yarnrc
)
declare -ar int_arg_flags=(
--depth
--network-concurrency
)
declare -ar special_arg_flags=(
--access
--groups
--level
--network-timeout
)
declare -ar optional_arg_flags=(
--emoji
--prod
--production
--scripts-prepend-node-path
)
declare -ar skipped_arg_flags=(
--https-proxy
--message
--mutex
--new-version
--otp
--pattern -P
--proxy
--registry
--resolved
--scope -S
--tag
)
declare -ar arg_flags=(
"${bool_arg_flags[@]}"
"${dir_arg_flags[@]}"
"${file_arg_flags[@]}"
"${int_arg_flags[@]}"
"${special_arg_flags[@]}"
"${optional_arg_flags[@]}"
"${skipped_arg_flags[@]}"
)
declare -ar global_flags=(
--cache-folder
--check-files
--cwd
--disable-pnp
--emoji
--enable-pnp --pnp
--flat
--focus
--force
--frozen-lockfile
--global-folder
--har
--help -h
--https-proxy
--ignore-engines
--ignore-optional
--ignore-platform
--ignore-scripts
--json
--link-duplicates
--link-folder
--modules-folder
--mutex
--network-concurrency
--network-timeout
--no-bin-links
--no-default-rc
--no-lockfile
--non-interactive
--no-node-version-check
--no-progress
--offline
--otp
--prefer-offline
--preferred-cache-folder
--prod
--production
--proxy
--pure-lockfile
--registry
--scripts-prepend-node-path
--silent -s
--skip-integrity-check
--strict-semver
--update-checksums
--use-yarnrc
--verbose
--version -v
)
declare -a flags=()
COMPREPLY=()
if command -v _get_comp_words_by_ref > /dev/null; then
_get_comp_words_by_ref -n = -n @ -n : cur prev words cword
elif command -v _init_completion > /dev/null; then
_init_completion
fi
__yarn_get_command -d 1
__yarn_flag_args || "_yarn_${cmd//-/_}" 2> /dev/null || __yarn_fallback
if command -v __ltrim_colon_completions > /dev/null; then
__ltrim_colon_completions "$cur"
fi
}
if [[ ${BASH_VERSINFO[0]} -ge 4 && ${BASH_VERSINFO[1]} -ge 4 ]]; then
complete -o nosort -F _yarn yarn
else
complete -F _yarn yarn
fi