From c06b0860345f14d6f1c3d447e060cab5b3e8fd18 Mon Sep 17 00:00:00 2001 From: Stanislav Butsenko Date: Wed, 28 May 2014 17:32:44 +0300 Subject: [PATCH] Update the Laravel4 plugin. Support the completion commands and arguments --- plugins/laravel4/laravel4.plugin.zsh | 79 +++++++++++++++++++++++++--- 1 file changed, 71 insertions(+), 8 deletions(-) diff --git a/plugins/laravel4/laravel4.plugin.zsh b/plugins/laravel4/laravel4.plugin.zsh index 4b1022b66..71d7bd4ef 100644 --- a/plugins/laravel4/laravel4.plugin.zsh +++ b/plugins/laravel4/laravel4.plugin.zsh @@ -1,19 +1,82 @@ -# Laravel4 basic command completion -_laravel4_get_command_list () { - php artisan --no-ansi | sed "1,/Available commands/d" | awk '/^ [a-z]+/ { print $1 }' +# Laravel4 extend command & arguments completion + +_laravel4_parse_commands () { + local help_string + + while read help_string; do + echo $help_string \ + | awk -F" +|\) " '/^ [a-z]+/ { gsub("^ +","",$1); gsub(":","\:",$1); print $1"["$2"]" }' + done } -_laravel4 () { - if [ -f artisan ]; then - compadd `_laravel4_get_command_list` +_laravel4_set_commands () { + local laravel4_commands IFS=$'\n' + + laravel4_commands=(`php artisan --no-ansi | sed "1,/Available commands:/d" | _laravel4_parse_commands`) + + _values '### Available commands:' $laravel4_commands +} + +_laravel4_parse_arguments () { + local simple_args help_string regex arg_name alt_args description + + simple_args=(--help --quiet --verbose --version --ansi --no-ansi --no-interaction --pretend --seed) + + while read help_string; do + regex="^\ *(-[a-z-]+)([\ +\(-]+([a-zA-Z\|]+)\)|)[\) ]+(.+?)" + if [[ "$help_string" =~ "$regex" ]]; then + arg_name="${match[1]}" + alt_args=$(echo "${match[3]}" | sed -r 's/([a-zA-Z]+)/-\1/g' | sed 's/|/ /g') + description="${match[4]}" + + # Detect allowed values for completion + value_fn='' + if [[ $arg_name =~ (-file|-path|Path)$ ]]; then + value_fn='_files' + fi + + if [[ $arg_name =~ -dir ]]; then + value_fn='_directories' + fi + + if [[ ${simple_args[(r)$arg_name]} == $arg_name ]]; then + printf "(%s)%s[%b]\n" "$alt_args" "$arg_name" "$description" + else + printf "%s=[%b]: :%s\n" "$arg_name" "$description" "$value_fn" + fi + fi + done +} + +_laravel4_set_arguments () { + local laravel4arguments IFS=$'\n' + + laravel4arguments=(`php artisan --no-ansi --help "$1" | sed "1,/Options:/d" | _laravel4_parse_arguments`) + + _arguments $laravel4arguments +} + +_laravel4completion () { + local cmdline regex + + cmdline=(${=words}) + cmdline=(${cmdline[2,-1]}) + + regex="\ [a-z][a-z:_-]+" + if [[ $CURRENT == 2 ]] || ! [[ " ${(j/ /)cmdline}" =~ $regex ]]; then + _laravel4_set_commands + else + _arguments '*:: :{{ _laravel4_set_arguments ${cmdline[1]} }}' fi } -compdef _laravel4 artisan -compdef _laravel4 la4 +zstyle ':completion:*:descriptions' format '%B%d%b' + +compdef _laravel4completion artisan #Alias alias la4='php artisan' +alias l='php artisan' alias la4dump='php artisan dump-autoload' alias la4cache='php artisan cache:clear'