#compdef mix 
#autoload

# Elixir mix zsh completion

local -a _1st_arguments
_1st_arguments=(
    'archive:Archive this project into a .ez file'
    'clean:Clean generated application files'
    'compile:Compile source files'
    'deps:List dependencies and their status'
    "deps.clean:Remove dependencies' files"
    'deps.compile:Compile dependencies'
    'deps.get:Get all out of date dependencies'
    'deps.unlock:Unlock the given dependencies'
    'deps.update:Update dependencies'
    'do:Executes the commands separated by comma'
    'escriptize:Generates an escript for the project'
    'help:Print help information for tasks'
    'local:List local tasks'
    'local.install:Install a task or an archive locally'
    'local.rebar:Install rebar locally'
    'local.uninstall:Uninstall local tasks or archives'
    'new:Creates a new Elixir project'
    'run:Run the given file or expression'
    "test:Run a project's tests"
    '--help:Describe available tasks'
    '--version:Prints the Elixir version information'
)

__task_list ()
{
    local expl
    declare -a tasks

    tasks=(archive clean compile deps deps.clean deps.compile deps.get deps.unlock deps.update do escriptize help local local.install local.rebar local.uninstall new run test)

    _wanted tasks expl 'help' compadd $tasks
}

local expl

local curcontext="$curcontext" state line
typeset -A opt_args

_arguments -C \
    ':command:->command' \
    '*::options:->options'

case $state in
  (command)
      _describe -t commands "mix subcommand" _1st_arguments
      return
  ;;

  (options)
    case $line[1] in
      (help)
         _arguments ':feature:__task_list' 
    esac
  ;;
esac