diff options
Diffstat (limited to 'completions/lintian')
-rw-r--r-- | completions/lintian | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/completions/lintian b/completions/lintian new file mode 100644 index 00000000..e2237893 --- /dev/null +++ b/completions/lintian @@ -0,0 +1,186 @@ +# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- +# ex: ts=8 sw=8 noet filetype=sh +# +# bash completion for lintian(1) and lintian-info(1) + +have lintian && { +_lintian_tags() { + local match search tags + + tags=$( grep -e ^Tag /usr/share/lintian/checks/*.desc | cut -d\ -f2 ) + if [[ "$cur" == *, ]]; then + search=${cur//,/ } + for item in $search; do + match=$(grep -nE "^Tag: $item$" /usr/share/lintian/checks/*.desc \ + | cut -d: -f1 ) + tags=$( echo $tags | sed -e "s/\<$item\>//g" ) + done + COMPREPLY=( ${COMPREPLY[@]} $(compgen -W "$tags") ) + elif [[ "$cur" == *,* ]]; then + COMPREPLY=( ${COMPREPLY[@]} $(compgen -P "${cur%,*}," -W "$tags" -- \ + "${cur##*,}") ) + else + COMPREPLY=( ${COMPREPLY[@]} $(compgen -W "$tags" -- "$cur") ) + fi + return 0 +} + +_lintian_checks() { + local match search todisable checks + + checks=$(grep -e ^Check-Script -e ^Abbrev \ + /usr/share/lintian/checks/*.desc | cut -d\ -f2 ) + if [[ "$cur" == *, ]]; then + search=${cur//,/ } + for item in $search; do + match=$(grep -nE "^(Check-Script|Abbrev): $item$" \ + /usr/share/lintian/checks/*.desc | cut -d: -f1 ) + todisable=$(grep -e ^Check-Script -e ^Abbrev $match | \ + cut -d\ -f2 ) + for name in $todisable; do + checks=$( echo $checks | sed -e "s/\<$name\>//g" ) + done + done + COMPREPLY=( ${COMPREPLY[@]} $(compgen -W "$checks") ) + elif [[ "$cur" == *,* ]]; then + COMPREPLY=( ${COMPREPLY[@]} $(compgen -P "${cur%,*}," -W "$checks" \ + -- "${cur##*,}") ) + else + COMPREPLY=( ${COMPREPLY[@]} $(compgen -W "$checks" -- "$cur") ) + fi + return 0 +} + +_lintian_infos() { + local match search infos + + infos=$(grep -e ^Collector /usr/share/lintian/collection/*.desc \ + | cut -d\ -f2 ) + if [[ "$cur" == *, ]]; then + search=${cur//,/ } + for item in $search; do + match=$( grep -nE "^Collector: $item$" \ + /usr/share/lintian/collection/*.desc | cut -d: -f1 ) + infos=$( echo $infos | sed -e "s/\<$item\>//g" ) + done + COMPREPLY=( ${COMPREPLY[@]} $(compgen -W "$infos") ) + elif [[ "$cur" == *,* ]]; then + COMPREPLY=( ${COMPREPLY[@]} $(compgen -P "${cur%,*}," -W "$infos" \ + -- "${cur##*,}") ) + else + COMPREPLY=( ${COMPREPLY[@]} $(compgen -W "$infos" -- "$cur") ) + fi + return 0 +} + +_lintian_arches() { + return 0 +} + +_lintian() { + local cur prev action lint_actions general_opts behaviour_opts \ + configuration_opts selection_opts + + _get_comp_words_by_ref cur prev + + 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 --unpack-level \ + --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" + selection_opts="--all --binary --source --udeb --packages-file" + + 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 + ;; + -l|--unpack-level) + COMPREPLY=($(compgen -W "0 none 1 basic 2 contents" -- \ + "$cur")) + ;; + --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. + echo $prev + case "$prev" in + -C|--check-part|-X|--dont-check-part) + _lintian_checks + ;; + -T|--tags|--suppress-tags) + _lintian_tags + ;; + -U|--unpack-info) + _lintian_infos + ;; + esac + ;; + *) + _filedir '@(?(u)deb|changes|dsc)' + ;; + esac + return 0 +} + +_lintian_info() { + local cur prev + + _get_comp_words_by_ref cur prev + + case "$prev" in + -t|--tags) + _lintian_tags + return 0 + ;; + esac + + case "$cur" in + --*) + COMPREPLY=($(compgen -W "--annotate --help --tags" -- "$cur")) + ;; + *) + _filedir + ;; + esac + return 0 +} + +complete -F _lintian lintian +complete -F _lintian_info lintian-info +} |