summaryrefslogtreecommitdiff
path: root/completions/python
blob: 5e69ff121cffa21410dfa434207501734df58ee0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# bash completion for python                               -*- shell-script -*-

_python_modules()
{
    COMPREPLY+=( $(compgen -W \
        "$(${1:-python} ${BASH_SOURCE[0]%/*}/../helpers/python $cur \
           2>/dev/null)" -- "$cur") )
}

_python_warning_actions()
{
    COMPREPLY+=( $(compgen -W "ignore default all module once error" \
                           ${prefix:+-P "$prefix"} -- "$cur") )
}

_python()
{
    local cur prev words cword prefix
    _init_completion || return

    case $cur in
        -[QWX]?*)
            prefix=${cur:0:2}
            prev=$prefix
            cur=${cur:2}
        ;;
    esac

    case $prev in
        --help|--version|-!(-*)[?hVcX])
            return
            ;;
        -!(-*)m)
            _python_modules "$1"
            return
            ;;
        -!(-*)Q)
            COMPREPLY=( $(compgen -W "old new warn warnall" -P "$prefix" \
                -- "$cur") )
            return
            ;;
        -!(-*)W)
            _python_warning_actions
            return
            ;;
        --jit)
            # TODO: quite a few others, parse from "--jit help" output?
            COMPREPLY=( $(compgen -W "help off" -- "$cur") )
            return
            ;;
        !(?(*/)python*([0-9.])|?(*/)pypy*([0-9.])|-?))
            [[ $cword -lt 2 || ${words[cword-2]} != -[QWX] ]] && _filedir
            ;;
    esac


    # if -c or -m is already given, complete all kind of files.
    if [[ "${words[*]::$cword}" == *\ -[cm]\ * ]]; then
        _filedir
    elif [[ "$cur" != -* ]]; then
        _filedir 'py?([cowz])'
    else
        COMPREPLY=( $(compgen -W '$(_parse_help "$1" -h)' -- "$cur") )
    fi
} &&
complete -F _python python python2 python3 pypy pypy3 micropython

# ex: filetype=sh