#compdef symfony # ------------------------------------------------------------------------------ # Description # ----------- # # Completion script for Symfony (http://www.symfony-project.org). # # ------------------------------------------------------------------------------ # Authors # ------- # # * aki77 (https://github.com/aki77) # # ------------------------------------------------------------------------------ # -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- # vim: ft=zsh sw=2 ts=2 et # ------------------------------------------------------------------------------ _symfony () { local curcontext="$curcontext" state line expl ret=1 cache_version cache_version=$(_get_sf_cache_var version) (( ${(P)+cache_version} == 0 )) && { eval $cache_version=${${${(z)$($service -V)}[3]}%.*} } if [ ${(P)cache_version} = "1.0" ] ; then _symfony10 return fi _arguments -C \ '(-T --tasks)'{-T,--tasks}'[list of the symfony tasks]' \ '(-V --version)'{-V,--version}'[version]' \ '1: :->tasks' \ '*:: :->args' && ret=0 case $state in tasks) _sf_tasks ;; args) local task args task=$words[1] args=( ${${${${${(M)${${${(z)${${"$($service help $task)"#*Usage:}#[[:cntrl:]]}%%[[:cntrl:]]*}//\[/}//\]/}:#--*}%%\"*}/=/"=-"}/(#b)--(app|application)=-/--$match[1]=-:application:_sf_apps}//(#b)--(env|environment)=-/--$match[1]=-:environment:_sf_environments} ) case $task in help) args+=( ':task:_sf_tasks' ) ;; app:routes) args+=( ':application:_sf_apps' ':"route name":' ) ;; configure:author) _message 'project author' ;; configure:database) _message 'database dsn' ;; generate:app) _message 'new application name' ;; generate:module) args+=( ':application:_sf_apps' ':"new module name":' ) ;; generate:project) _message 'new project name' ;; generate:task) _message 'new task name' ;; i18n:extract) args+=( ':application:_sf_apps' ':"target culture":' ) ;; i18n:find) args+=( ':application:_sf_apps' ) ;; log:rotate) args+=( ':application:_sf_apps' ':environment:_sf_environments' ) ;; plugin:add-channel) _message 'channel name' ;; plugin:install) _message 'plugin name' ;; plugin:publish-assets) args+=( ':plugin:_sf_plugins' ) ;; plugin:uninstall) _message 'plugin name' ;; plugin:upgrade) _message 'plugin name' ;; project:deploy) _message 'server name' ;; project:disable|project:enable) args+=( ':environment:_sf_environments' '*:application:_sf_apps' ) ;; project:optimize) args+=( ':application:_sf_apps' ':environment:_sf_environments' ) ;; propel:data-dump|doctrine:data-dump) _message 'target filename' ;; propel:data-load|doctrine:data-load) args+=( '*:file:_files' ) ;; propel:generate-admin) args+=( ':application:_sf_apps' ':model:_sf_models' ) ;; propel:generate-module|propel:init-admin) args+=( ':application:_sf_apps' ':module:_sf_modules_candidate' ':model:_sf_models' ) ;; propel:generate-module-for-route|doctrine:generate-module-for-route) args+=( ':application:_sf_apps' ':"route name":' ) ;; doctrine:create-model-tables|doctrine:delete-model-files) args+=( '*:model:_sf_doctrine_models' ) ;; doctrine:generate-admin) args+=( ':application:_sf_apps' '*:model:_sf_doctrine_models' ) ;; doctrine:generate-module) args+=( ':application:_sf_apps' ':module:_sf_doctrine_modules_candidate' ':model:_sf_doctrine_models' ) ;; test:coverage) args+=( '*:file:_files' ) ;; test:functional) args+=( ':application:_sf_apps' '*:test:_sf_functionaltests' ) ;; test:unit) args+=( '*:test:_sf_unittests' ) ;; esac _arguments "$args[@]" && ret=0 return ;; esac return ret } _symfony10 () { local curcontext="$curcontext" state line expl ret=1 _arguments -C \ '(-T --tasks)'{-T,--tasks}'[list of the symfony tasks]' \ '(-V --version)'{-V,--version}'[version]' \ '1: :->tasks' \ '*:: :->args' && ret=0 case $state in tasks) _sf10_tasks ;; args) local task args task=$words[1] args=() case $task in init-project) _message 'new project name' ;; init-app) _message 'application name' ;; init-module) args+=( ':application:_sf_apps' ) ;; init-batch) args+=( ':skeleton name:compadd default rotate' ':"script name":' ':application:_sf_apps' ) ;; init-controller) args+=( ':application:_sf_apps' ':environment:_sf_environments' ':"script name":' ':"debug?":compadd true false' ) ;; log-rotate) args+=( ':application:_sf_apps' ':environment:_sf_environments' ) ;; propel-load-data|propel-build-all-load) args+=( ':application:_sf_apps' ':environment:_sf_environments' ':fixtures:_sf_fixtures' ) ;; clear-cache|cc) args+=( ':application:_sf_apps' ':what:compadd template config' ) ;; sync) args+=( ':environment:_sf_environments' ':"real run?":compadd go' ) ;; propel-init-crud|propel*-init-admin|propel-generate-crud) args+=( ':application:_sf_apps' ':module:_sf_modules_candidate' ':model:_sf_models' ) ;; doctrine-init-admin|doctrine-generate-crud) args+=( ':application:_sf_apps' ':module:_sf_doctrine_modules_candidate' ':model:_sf_doctrine_models' ) ;; test-unit) args+=( ':test:_sf_unittests' ) ;; test-functional) args+=( ':application:_sf_apps' ':test:_sf_functionaltests' ) ;; esac _arguments "$args[@]" && ret=0 return ;; esac return ret } _sf_tasks () { local tmp ns line cache_task cache_task=$(_get_sf_cache_var task) (( ${(P)+cache_task} == 0 )) && { tmp=( ${${${(f)${"$($service -T)"##*Available tasks:}}##[[:blank:]][[:blank:]]}%%[[:blank:]]*} ) eval "$cache_task=()" ns='' for line in $tmp; do if [ $line[1] = ":" ] ; then eval "$cache_task+=( ${ns}${line#:} )" else ns="${line}:" fi done } _wanted symfony-task expl 'Symfony task' compadd -a $cache_task } _sf10_tasks () { local sf_tasks sf_tasks=( ${${${(f)${"$($service -T)"#available pake tasks:}%%task aliases:*}#[[:blank:]][[:blank:]]}/[[:blank:]]*>[[:blank:]]/:} ) _describe -t symfony-tasks 'Symfony task' sf_tasks } _sf_apps () { _wanted application expl 'application' compadd \ ${$(echo apps/*):t} } _sf_environments () { local app app=$([ -f apps/"$words[2]"/config/settings.yml ] && echo $words[2] || echo frontend) if [ -r apps/$app/config/settings.yml ] ; then _wanted environment expl 'environment' compadd \ ${${${(M)${(@f)"$(