function _lein_commands() {
    local ret=1 state
    _arguments ':subcommand:->subcommand' && ret=0

    case $state in
      subcommand)
        subcommands=(
          "clean:remove compiled files and dependencies from project"
          "compile:ahead-of-time compile the project"
          "deps:download and install all dependencies"
          "help:display a list of tasks or help for a given task"
          "install:install the project and its dependencies in your local repository"
          "jar:create a jar file containing the compiled .class files"
          "new:create a new project skeleton"
          "pom:write a pom.xml file to disk for maven interop"
          "test:run the project's tests"
          "uberjar:Create a jar including the contents of each of deps"
          "upgrade:upgrade leiningen to the latest stable release"
          "version:print leiningen's version"
        )
        _describe -t subcommands 'leiningen subcommands' subcommands && ret=0
    esac

    return ret
}

compdef _lein_commands lein