1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
# jq(1) completion -*- shell-script -*-
_comp_cmd_jq()
{
local cur prev words cword comp_args
_comp_initialize -- "$@" || return
local noargopts='!(-*|*[fL]*)'
# shellcheck disable=SC2254
case $prev in
--help | --version | --arg | --argjson | --slurpfile | --argfile)
return
;;
--indent)
_comp_compgen -- -W '{1..8}'
return
;;
--from-file | --run-tests | -${noargopts}f)
_comp_compgen_filedir
return
;;
-${noargopts}L)
_comp_compgen_filedir -d
return
;;
esac
((cword > 2)) &&
case ${words[cword - 2]} in
--arg | --argjson)
return
;;
--slurpfile | --argfile)
_comp_compgen_filedir 'json?(l)'
return
;;
esac
if [[ $cur == -* ]]; then
# Get jq's --help output and see whether it mentions --help
# jq's --help only shows some of its command-line options; some are not
# even listed in the man page!
local help_output=$("$1" --help 2>/dev/null)
if [[ $help_output == *--help* ]]; then
# If the output of --help seems complete, use it
_comp_compgen_help - <<<"$help_output"
else
# Otherwise, use a hard-coded list of known flags, some of which do
# not appear in the output of --help as of jq 1.6.
_comp_compgen -- -W '--version --seq --stream --slurp --raw-input
--null-input --compact-output --tab --indent --color-output
-monochrome-output --ascii-output --unbuffered --sort-keys
--raw-output --join-output --from-file --exit-status --arg
--argjson --slurpfile --rawfile --argfile --args --jsonargs
--run-tests --help'
fi
return
fi
local word
for word in "${words[@]}"; do
[[ $word != --?(json)args ]] || return
done
local REPLY
# TODO: DTRT with args taking 2 options
# -f|--from-file are not counted here because they supply the filter
_comp_count_args -a "@(--arg|--arg?(json|file)|--slurpfile|--indent|--run-tests|-${noargopts}L)"
# 1st arg is filter
((REPLY == 1)) && return
# 2... are input files
_comp_compgen_filedir 'json?(l)'
} &&
complete -F _comp_cmd_jq jq
# ex: filetype=sh
|