diff options
Diffstat (limited to 'completions/pytest')
-rw-r--r-- | completions/pytest | 90 |
1 files changed, 69 insertions, 21 deletions
diff --git a/completions/pytest b/completions/pytest index 9239766c..7457a840 100644 --- a/completions/pytest +++ b/completions/pytest @@ -3,38 +3,46 @@ _pytest() { local cur prev words cword split - _init_completion -s || return + _init_completion -s -n : || return case $prev in - --help|--maxfail|--report|--junit-prefix|--doctest-glob|-!(-*)[hkmrp]) + --help | --maxfail | --report | --junit-prefix | --doctest-glob | -!(-*)[hkmorp]) return ;; --import-mode) - COMPREPLY=( $(compgen -W "prepend append" -- "$cur") ) + COMPREPLY=($(compgen -W "prepend append" -- "$cur")) return ;; --capture) - COMPREPLY=( $(compgen -W "fd sys no" -- "$cur") ) + COMPREPLY=($(compgen -W "fd sys no tee-sys" -- "$cur")) + return + ;; + --lfnf | --last-failed-no-failures) + COMPREPLY=($(compgen -W "all none" -- "$cur")) return ;; --tb) - COMPREPLY=( $(compgen -W "auto long short line native no" \ - -- "$cur") ) + COMPREPLY=($(compgen -W "auto long short line native no" \ + -- "$cur")) + return + ;; + --show-capture) + COMPREPLY=($(compgen -W "no stdout stderr log all" -- "$cur")) return ;; --color) - COMPREPLY=( $(compgen -W "yes no auto" -- "$cur") ) + COMPREPLY=($(compgen -W "yes no auto" -- "$cur")) return ;; --pastebin) - COMPREPLY=( $(compgen -W "failed all" -- "$cur") ) + COMPREPLY=($(compgen -W "failed all" -- "$cur")) return ;; --junit-xml) _filedir xml return ;; - --result-log) + --result-log | --log-file) _filedir log return ;; @@ -42,45 +50,85 @@ _pytest() _filedir return ;; - --confcutdir|--basetemp|--rsyncdir) + --confcutdir | --basetemp | --rsyncdir | --rootdir) _filedir -d return ;; + --doctest-report) + COMPREPLY=($(compgen -W "none cdiff ndiff udiff only_first_failure" -- "$cur")) + return + ;; --assert) - COMPREPLY=( $(compgen -W "plain reinterp rewrite" -- "$cur") ) + COMPREPLY=($(compgen -W "plain reinterp rewrite" -- "$cur")) return ;; --genscript) _filedir py return ;; - --pythonwarnings|-!(-*)W) + --pythonwarnings | -!(-*)W) _xfunc python _python_warning_actions return ;; - --numprocesses|-!(-*)n) - COMPREPLY=( $(compgen -W "{1..$(_ncpus)} auto" -- "$cur") ) + --numprocesses | -!(-*)n) + COMPREPLY=($(compgen -W "{1..$(_ncpus)} auto" -- "$cur")) return ;; --dist) - local modes=$("$1" --dist=nonexistent-distmode 2>&1 | \ + local modes=$("$1" --dist=nonexistent-distmode 2>&1 | command sed -e 's/[^[:space:][:alnum:]-]\{1,\}//g' \ - -ne 's/.*choose from //p') - COMPREPLY=( $(compgen -W '$modes' -- "$cur") ) + -ne 's/.*choose from //p') + COMPREPLY=($(compgen -W '$modes' -- "$cur")) return ;; esac $split && return - if [[ "$cur" == -* ]]; then - COMPREPLY=( $(compgen -W '$(_parse_help "$1")' -- "$cur") ) - [[ $COMPREPLY == *= ]] && compopt -o nospace + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) + [[ ${COMPREPLY-} == *= ]] && compopt -o nospace + return + fi + + if [[ $cur == *.py::*:* ]]; then + local file=${cur/.py:*/.py} + local class=${cur#*.py::} in_class=false + local line + class=${class%%:*} + while IFS= read -r line; do + if [[ $line =~ ^class[[:space:]]+${class}[[:space:]:\(] ]]; then + in_class=true + elif [[ $line =~ ^class[[:space:]] ]]; then + in_class=false + fi + if $in_class && [[ $line =~ ^[[:space:]]+(async[[:space:]]+)?def[[:space:]]+(test_[A-Za-z0-9_]+) ]]; then + COMPREPLY+=(${BASH_REMATCH[2]}) + fi + done 2>/dev/null <"$file" + ((!${#COMPREPLY[@]})) || + COMPREPLY=($(compgen -P "$file::$class::" -W '${COMPREPLY[@]}' \ + -- "${cur##*:?(:)}")) + __ltrim_colon_completions "$cur" + return + elif [[ $cur == *.py:* ]]; then + local file="${cur/.py:*/.py}" line + while IFS= read -r line; do + if [[ $line =~ ^class[[:space:]]+(Test[A-Za-z0-9_]+) ]]; then + COMPREPLY+=(${BASH_REMATCH[1]}) + elif [[ $line =~ ^(async[[:space:]]+)?def[[:space:]]+(test_[A-Za-z0-9_]+) ]]; then + COMPREPLY+=(${BASH_REMATCH[2]}) + fi + done 2>/dev/null <"$file" + ((!${#COMPREPLY[@]})) || + COMPREPLY=($(compgen -P "$file::" -W '${COMPREPLY[@]}' \ + -- "${cur##*.py:?(:)}")) + __ltrim_colon_completions "$cur" return fi _filedir py } && -complete -F _pytest pytest pytest-2 pytest-3 py.test py.test-2 py.test-3 + complete -F _pytest pytest pytest-2 pytest-3 py.test py.test-2 py.test-3 # ex: filetype=sh |