diff options
Diffstat (limited to 'completions/ant')
-rw-r--r-- | completions/ant | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/completions/ant b/completions/ant new file mode 100644 index 0000000..197c0e9 --- /dev/null +++ b/completions/ant @@ -0,0 +1,102 @@ +# bash completion for ant and phing -*- shell-script -*- + +_ant_parse_targets() +{ + local line basedir + + [[ $1 == */* ]] && basedir=${1%/*} || basedir=. + + # parse buildfile for targets + while read -rd '>' line; do + if [[ $line =~ \<(target|extension-point)[[:space:]].*name=[\"\']([^\"\']+) ]]; then + targets+=" ${BASH_REMATCH[2]}" + fi + done <$1 + + # parse imports + while read -rd '>' line; do + if [[ $line =~ \<import[[:space:]].*file=[\"\']([^\"\']+) ]]; then + local imported_buildfile + imported_buildfile="${basedir}/${BASH_REMATCH[1]}" + if [[ -f $imported_buildfile ]]; then + _ant_parse_targets $imported_buildfile + fi + fi + done <$1 +} + +_ant() +{ + local cur prev words cword + _init_completion || return + + case $prev in + -h | -help | --h | --help | -projecthelp | -p | -version | -diagnostics) + return + ;; + -buildfile | -file | -f) + _filedir 'xml' + return + ;; + -logfile | -l) + [[ $1 != *phing || $prev != -l ]] && _filedir + return + ;; + -propertyfile) + _filedir properties + return + ;; + -nice) + COMPREPLY=($(compgen -W '{1..10}' -- "$cur")) + return + ;; + -lib) + _filedir -d + return + ;; + -logger | -listener | -inputhandler | -main | -find | -s) + return + ;; + esac + + if [[ $cur == -D* ]]; then + return + elif [[ $cur == -* ]]; then + # The </dev/null prevents "phing -" weirdness/getting just a literal + # tab displayed on complete on CentOS 6 with phing 2.6.1. + COMPREPLY=( + $(compgen -W '$(_parse_help "$1" -h </dev/null)' -- "$cur")) + else + # available targets completion + # find which buildfile to use + local buildfile=build.xml i + for ((i = 1; i < cword; i++)); do + if [[ ${words[i]} == -@(?(build)file|f) ]]; then + buildfile=${words[i + 1]} + break + fi + done + if ((i == cword)); then + for i in ${ANT_ARGS-}; do + if [[ $prev == -@(?(build)file|f) ]]; then + buildfile=$i + break + fi + prev=$i + done + fi + [[ ! -f $buildfile ]] && return + + local targets + + # fill targets + _ant_parse_targets $buildfile + + COMPREPLY=($(compgen -W '$targets' -- "$cur")) + fi +} && + complete -F _ant ant phing +type complete-ant-cmd.pl &>/dev/null && + complete -C complete-ant-cmd.pl -F _ant ant || : + +# ex: filetype=sh |