From 92cc0b35270c4ca53d4e5d2f05fafef4eaab08c3 Mon Sep 17 00:00:00 2001 From: Julien Nicoulaud Date: Fri, 22 Jul 2011 11:39:54 +0200 Subject: [PATCH] #15: Add Symfony completion --- _symfony | 451 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 451 insertions(+) create mode 100644 _symfony diff --git a/_symfony b/_symfony new file mode 100644 index 0000000..994a874 --- /dev/null +++ b/_symfony @@ -0,0 +1,451 @@ +#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)"$(