diff options
Diffstat (limited to 'completions/lintian')
-rw-r--r-- | completions/lintian | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/completions/lintian b/completions/lintian new file mode 100644 index 0000000..9343832 --- /dev/null +++ b/completions/lintian @@ -0,0 +1,176 @@ +# bash completion for lintian(1) and lintian-info(1) -*- shell-script -*- + +_lintian_tags() +{ + local match search tags + + tags=$(awk '/^Tag/ { print $2 }' /usr/share/lintian/checks/*.desc) + if [[ $cur == *, ]]; then + search=${cur//,/ } + for item in $search; do + match=$(command grep -nE "^Tag: $item$" \ + /usr/share/lintian/checks/*.desc | cut -d: -f1) + tags=$(command sed -e "s/\<$item\>//g" <<<$tags) + done + COMPREPLY+=($(compgen -W "$tags")) + elif [[ $cur == *,* ]]; then + COMPREPLY+=($(compgen -P "${cur%,*}," -W "$tags" -- "${cur##*,}")) + else + COMPREPLY+=($(compgen -W "$tags" -- "$cur")) + fi +} + +_lintian_checks() +{ + local match search todisable checks + + checks=$(awk '/^(Check-Script|Abbrev)/ { print $2 }' \ + /usr/share/lintian/checks/*.desc) + if [[ $cur == *, ]]; then + search=${cur//,/ } + for item in $search; do + match=$(command grep -nE "^(Check-Script|Abbrev): $item$" \ + /usr/share/lintian/checks/*.desc | cut -d: -f1) + todisable=$(awk '/^(Check-Script|Abbrev)/ { print $2 }' $match) + for name in $todisable; do + checks=$(command sed -e "s/\<$name\>//g" <<<$checks) + done + done + COMPREPLY+=($(compgen -W "$checks")) + elif [[ $cur == *,* ]]; then + COMPREPLY+=($(compgen -P "${cur%,*}," -W "$checks" -- "${cur##*,}")) + else + COMPREPLY+=($(compgen -W "$checks" -- "$cur")) + fi +} + +_lintian_infos() +{ + local match search infos + + infos=$(awk '/^Collector/ { print $2 }' \ + /usr/share/lintian/collection/*.desc) + if [[ $cur == *, ]]; then + search=${cur//,/ } + for item in $search; do + match=$(command grep -nE "^Collector: $item$" \ + /usr/share/lintian/collection/*.desc | cut -d: -f1) + infos=$(command sed -e "s/\<$item\>//g" <<<$infos) + done + COMPREPLY+=($(compgen -W "$infos")) + elif [[ $cur == *,* ]]; then + COMPREPLY+=($(compgen -P "${cur%,*}," -W "$infos" -- "${cur##*,}")) + else + COMPREPLY+=($(compgen -W "$infos" -- "$cur")) + fi +} + +_lintian() +{ + local cur prev words cword + _init_completion || return + + local lint_actions general_opts behaviour_opts configuration_opts + + lint_actions="--setup-lab --remove-lab --check --check-part --tags + --tags-from-file --ftp-master-rejects --dont-check-part --unpack + --remove" + general_opts="--help --version --print-version --verbose --debug --quiet" + behaviour_opts="--info --display-info --display-experimental --pedantic + --display-level --suppress-tags --suppress-tags-from-file --no-override + --show-overrides --color --unpack-info --md5sums --checksums + --allow-root --fail-on-warnings --keep-lab" + configuration_opts="--cfg --lab --archivedir --dist --area --section --arch + --root" + + if [[ $prev == -* ]]; then + case $prev in + -C | --check-part | -X | --dont-check-part) + _lintian_checks + ;; + -T | --tags | --suppress-tags) + _lintian_tags + ;; + --tags-from-file | --suppress-tags-from-file | --cfg | -p | \ + --packages-file) + _filedir + ;; + --lab | --archivedir | --dist | --root) + _filedir -d + ;; + --color) + COMPREPLY=($(compgen -W "never always auto html" -- "$cur")) + ;; + -U | --unpack-info) + _lintian_infos + ;; + --area | --section) + COMPREPLY=($(compgen -W "main contrib non-free" -- "$cur")) + ;; + --arch) ;; + + esac + fi + + case "$cur" in + --*) + COMPREPLY=($(compgen -W "$lint_actions $general_opts + $behaviour_opts $configuration_opts" -- "$cur")) + ;; + *,) + # If we're here, the user is trying to complete on + # --action tag,tag,<TAB> + # Only few actions permit that, re-complete them now. + case "$prev" in + -C | --check-part | -X | --dont-check-part) + _lintian_checks + ;; + -T | --tags | --suppress-tags) + _lintian_tags + ;; + -U | --unpack-info) + _lintian_infos + ;; + esac + ;; + *) + # in Ubuntu, dbgsym packages end in .ddeb, lintian >= 2.57.0 groks + _filedir '@(?(u|d)deb|changes|dsc|buildinfo)' + ;; + esac + return 0 +} && + complete -F _lintian lintian + +_lintian_info() +{ + local cur prev words cword + _init_completion || return + + case "$prev" in + --help | --profile) + return + ;; + -t | --tags) + _lintian_tags + return + ;; + --include-dir) + _filedir -d + return + ;; + esac + + case "$cur" in + --*) + COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + ;; + *) + _filedir + ;; + esac + return 0 +} && + complete -F _lintian_info lintian-info + +# ex: filetype=sh |