# bash shell function completion                           -*- shell-script -*-

_function()
{
    local cur prev words cword
    _init_completion || return

    if [[ $1 == @(declare|typeset) ]]; then
        if [[ $cur == [-+]* ]]; then
            local opts
            opts=( $( _parse_usage "$1" ) )
            # Most options also have a '+' form.  We'll exclude the ones that don't with compgen.
            opts+=( ${opts[*]/-/+} )
            COMPREPLY=( $( compgen -W "${opts[*]}" -X '+[Ffgp]' -- "$cur" ) )
        else
            local i=1
            while [[ ${words[i]} == [-+]* ]]; do
                if [[ ${words[i]} == -*[fF]* ]]; then
                    COMPREPLY=( $( compgen -A function -- "$cur" ) )
                    return
                fi
                ((i++))
            done
            if [[ $i -gt 1 ]]; then
                # There was at least one option and it was not one that limited operations to functions
                COMPREPLY=( $( compgen -A variable -- "$cur" ) )
            fi
        fi
    elif [[ $cword -eq 1 ]]; then
        COMPREPLY=( $( compgen -A function -- "$cur" ) )
    else
        COMPREPLY=( "() $( type -- ${words[1]} | command sed -e 1,2d )" )
    fi
} &&
complete -F _function function declare typeset

# ex: filetype=sh
