summaryrefslogtreecommitdiffstats
path: root/completions/declare
blob: 128cb30517ac2173d94d21bd6efaefd36ed861e3 (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
# bash declare completion                                  -*- shell-script -*-

_comp_cmd_declare()
{
    local cur prev words cword comp_args
    _comp_initialize -n := -- "$@" || return

    if [[ $cur == [-+]* ]]; then
        local opts
        _comp_compgen -Rv opts usage -c help -s "$1"
        # Most options also have a '+' form.
        # We'll exclude the ones that don't with compgen.
        opts+=("${opts[@]/-/+}")
        _comp_compgen -- -W "${opts[*]}" -X '+[Ffgp]'
        return
    fi

    local i=1
    while [[ ${words[i]} == [-+]* ]]; do
        case ${words[i]} in
            -*[aA]*)
                _comp_compgen -- -A arrayvar
                return
                ;;
            -*[fF]*)
                _comp_compgen -- -A function
                return
                ;;
        esac
        ((i++))
    done
    if ((i > 1)); then
        # There was at least one option and it was not one that limited
        # operations to functions and array variables
        _comp_variable_assignments "$cur" && return
        _comp_compgen -- -A variable
    fi
} &&
    complete -F _comp_cmd_declare declare typeset

# ex: filetype=sh