summaryrefslogtreecommitdiff
path: root/completions/pytest
diff options
context:
space:
mode:
Diffstat (limited to 'completions/pytest')
-rw-r--r--completions/pytest90
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