#compdef getopts unset

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

local ret=1

if [[ $PREFIX = *\[* ]]; then
  compstate[parameter]=${PREFIX%%(|\\)\[*}

  IPREFIX=${PREFIX%%\[*}\[
  PREFIX=${PREFIX#*\[}

  _subscript -q
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
