#compdef getopts unset vared

# This will handle completion of keys of associative arrays, e.g. at
# `vared foo[<TAB>'.

local ret=1

if [[ $PREFIX = *\[* ]]; then
  local var=${PREFIX%%\[*}
  local elt="${PREFIX#*\]}${SUFFIX%\]}"
  local addclose

  compset -p $(( ${#var} + 1 ))
  if ! compset -S \]; then
    addclose=(-S "${${QIPREFIX:+]}:-\]}")
  fi
  if [[ ${(tP)var} = assoc* ]]; then
    local expl

    _wanted -C subscript association-keys expl 'association key' \
        compadd $addclose -k "$var"
  fi
else
  _parameters -g '^a*' "$@" && ret=0
  
  if compset -S '\[*'; then
    set - -S "" "$@"
  else
    set - -qS"${${QIPREFIX:+[}:-\[}" "$@"
  fi
  _parameters -g 'a*' "$@" && ret=0
  return ret
fi
