diff options
Diffstat (limited to 'completions/pytest')
-rw-r--r-- | completions/pytest | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/completions/pytest b/completions/pytest new file mode 100644 index 0000000..7457a84 --- /dev/null +++ b/completions/pytest @@ -0,0 +1,134 @@ +# bash completion for pytest(1) -*- shell-script -*- + +_pytest() +{ + local cur prev words cword split + _init_completion -s -n : || return + + case $prev in + --help | --maxfail | --report | --junit-prefix | --doctest-glob | -!(-*)[hkmorp]) + return + ;; + --import-mode) + COMPREPLY=($(compgen -W "prepend append" -- "$cur")) + return + ;; + --capture) + 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")) + return + ;; + --show-capture) + COMPREPLY=($(compgen -W "no stdout stderr log all" -- "$cur")) + return + ;; + --color) + COMPREPLY=($(compgen -W "yes no auto" -- "$cur")) + return + ;; + --pastebin) + COMPREPLY=($(compgen -W "failed all" -- "$cur")) + return + ;; + --junit-xml) + _filedir xml + return + ;; + --result-log | --log-file) + _filedir log + return + ;; + --ignore) + _filedir + return + ;; + --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")) + return + ;; + --genscript) + _filedir py + return + ;; + --pythonwarnings | -!(-*)W) + _xfunc python _python_warning_actions + return + ;; + --numprocesses | -!(-*)n) + COMPREPLY=($(compgen -W "{1..$(_ncpus)} auto" -- "$cur")) + return + ;; + --dist) + 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")) + return + ;; + esac + + $split && return + + 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 + +# ex: filetype=sh |