From 06a3332cb7c9c946a309009d94adfdb389e0e291 Mon Sep 17 00:00:00 2001 From: Julien Nicoulaud Date: Thu, 21 Jul 2011 17:48:00 +0200 Subject: [PATCH] #5: Add play completion (incomplete) --- _play | 270 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 270 insertions(+) create mode 100644 _play diff --git a/_play b/_play new file mode 100644 index 0000000..ec77008 --- /dev/null +++ b/_play @@ -0,0 +1,270 @@ +#compdef play +# ------------------------------------------------------------------------------ +# Copyright (c) 2011 zsh-users +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the zsh-users nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ +# Status +# ------ +# +# See FIXME and TODO tags. +# +# ------------------------------------------------------------------------------ +# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*- +# vim: ft=zsh sw=2 ts=2 et +# ------------------------------------------------------------------------------ + + +_play() { + local curcontext="$curcontext" state line cmds ret=1 + + _arguments -C '*::arg:->args' && return + + case $state in + (args) + if (( CURRENT == 1 )); then + _play_cmds && ret=0 + else + curcontext="${curcontext%:*:*}:play-cmd-$words[1]:" + (( $+functions[_play_cmd_$words[1]] )) && _play_cmd_$words[1] && ret=0 + fi + ;; + esac + + return ret +} + +_play_cmds() { + local ret=1 commands + # FIXME Parse 'play help' output instead of hard-coding. + # FIXME Those are only the core commands, the framework is extensible through a module system... + commands=( + 'auto-test:Automatically run all application tests' + 'build-module:Build and package a module' + 'check:Check for a release newer than the current one' + {classpath,cp}':Display the computed classpath' + 'clean:Delete temporary files (including the bytecode cache)' + {eclipsify,ec}':Create all Eclipse configuration files' + 'help:Display help on a specific command' + 'id:Define the framework ID' + {idealize,idea}':Create all IntelliJ Idea configuration files' + 'install:Install a module' + {javadoc,jd}':Generate your application Javadoc' + {list-modules,lm}':List modules available from the central modules repository' + 'modules:Display the computed modules list' + {netbeansify,nb}':Create all NetBeans configuration files' + 'new:Create a new application' + 'new-module:Create a module' + 'out:Follow logs/system.out file' + 'pid:Show the PID of the running application' + 'precompile:Precompile all Java sources and templates to speed up application start-up' + 'restart:Restart the running application' + 'run:Run the application in the current shell' + 'secret:Generate a new secret key' + 'start:Start the application in the background' + {status,st}':Display the running application status' + 'stop:Stop the running application' + 'test:Run the application in test mode in the current shell' + 'war:Export the application as a standalone WAR archive' + ) + _describe -t commands 'play command' commands && ret=0 + return ret +} + +_play_cmd_auto-test() { + local ret=1 + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_build-module() { + return 1 +} + +_play_cmd_check() { + return 1 +} + +_play_cmd_classpath _play_cmd_cp() { + local ret=1 + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_clean() { + local ret=1 + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_eclipsify _play_cmd_ec() { + local ret=1 + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_help() { + local ret=1 + (( CURRENT == 2 )) && _play_cmds && ret=0 + return ret +} + +_play_cmd_id() { + return 1 +} + +_play_cmd_idealize _play_cmd_idea() { + local ret=1 + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_install() { + local ret=1 commands + # TODO Not implemented. Parse 'play list-modules' output. + return ret +} + +_play_cmd_javadoc _play_cmd_jd() { + local ret=1 + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_list-modules _play_cmd_lm() { + return 1 +} + +_play_cmd_modules() { + local ret=1 + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_netbeansify _play_cmd_nb() { + local ret=1 + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_new() { + local ret=1 + # TODO --with module_list option + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_new-module() { + local ret=1 commands + # TODO Not implemented + return ret +} + +_play_cmd_out() { + local ret=1 + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_pid() { + local ret=1 + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_precompile() { + local ret=1 + # TODO --deps / --%fwk_id options + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_restart() { + local ret=1 + # TODO --deps / --%fwk_id / JAVA_OPTS options + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_run() { + local ret=1 + # TODO --deps / --%fwk_id / -f / JAVA_OPTS options + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_secret() { + local ret=1 + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_start() { + local ret=1 + # TODO --deps / --%fwk_id / JAVA_OPTS options + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_status _play_cmd_st() { + local ret=1 + # TODO --url / --secret options + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_stop() { + local ret=1 + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_test() { + local ret=1 + # TODO --deps / -f / JAVA_OPTS options + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_cmd_war() { + local ret=1 + # TODO --output / --zip / --deps / --%fwk_id / --exclude / JAVA_OPTS options + (( CURRENT == 2 )) && _play_apps && ret=0 + return ret +} + +_play_apps() { + local ret=1 commands + # FIXME Don't provide all directories but only real Play apps + _files -/ && ret=0 + return ret +} + +_play "$@"