# xz(1) completion

_comp_cmd_xz()
{
    local cur prev words cword was_split comp_args
    _comp_initialize -s -- "$@" || return

    local xspec="*.@(xz|lzma|txz|tlz)"

    local noargopts='!(-*|*[CFTMS]*)'
    # shellcheck disable=SC2254
    case $prev in
        --decompress | --list | --test | -${noargopts}[dlt]*)
            xspec="!"$xspec
            ;;
        --files | --files0)
            _comp_compgen_filedir
            return
            ;;
        --check | -${noargopts}C)
            _comp_compgen -- -W 'crc32 crc64 sha256 none'
            return
            ;;
        --format | -${noargopts}F)
            _comp_compgen -- -W 'auto xz lzma raw'
            return
            ;;
        --threads | -${noargopts}T)
            local REPLY
            _comp_get_ncpus
            _comp_compgen -- -W "{0..$REPLY}"
            return
            ;;
        --memlimit | --memlimit-compress | --memlimit-decompress | --memory | \
            --suffix | --delta | --lzma1 | --lzma2 | -${noargopts}[MS])
            return
            ;;
        --help | --long-help | --version | --info-memory | -${noargopts}[hHV])
            return
            ;;
    esac

    [[ $was_split ]] && return

    if [[ $cur == -* ]]; then
        _comp_compgen_help -- --long-help
        _comp_compgen -a -- -W '{-1..-9}'
        [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
        return
    fi

    _comp_compgen_tilde && return

    compopt -o filenames
    _comp_compgen -- -f -X "$xspec" -o plusdirs
} &&
    complete -F _comp_cmd_xz xz pxz
