# vim: set tabstop=2 shiftwidth=2 expandtab:

_GO_TASK_COMPLETION_LIST_OPTION='--list-all'

function _task()
{
  local cur prev words cword
  _init_completion -n : || return

  # Handle special arguments of options.
  case "$prev" in
    -d|--dir)
      _filedir -d
      return $?
    ;;
    -t|--taskfile)
      _filedir yaml || return $?
      _filedir yml
      return $?
    ;;
    -o|--output)
      COMPREPLY=( $( compgen -W "interleaved group prefixed" -- $cur ) )
      return 0
    ;;
  esac

  # Handle normal options.
  case "$cur" in
    -*)
      COMPREPLY=( $( compgen -W "$(_parse_help $1)" -- $cur ) )
      return 0
    ;;
  esac

  # Prepare task name completions.
  local tasks=( $( "${COMP_WORDS[@]}" --silent $_GO_TASK_COMPLETION_LIST_OPTION 2> /dev/null ) )
  COMPREPLY=( $( compgen -W "${tasks[*]}" -- "$cur" ) )

  # Post-process because task names might contain colons.
  __ltrim_colon_completions "$cur"
}

complete -F _task task
