Permalink
Browse files

30378: new gradle completion

  • Loading branch information...
1 parent 511fc6e commit 8bb9818cd403092830896c7c7dd02e3ccd744213 @Mikachu Mikachu committed Mar 25, 2012
Showing with 121 additions and 1 deletion.
  1. +6 −1 ChangeLog
  2. +1 −0 Completion/Unix/Command/.distfiles
  3. +114 −0 Completion/Unix/Command/_gradle
View
@@ -1,3 +1,8 @@
+2012-03-25 Mikael Magnusson <mikachu@gmail.com>
+
+ * Jesper Nygårds: 30378: Completion/Unix/Command/.distfiles,
+ Completion/Unix/Command/_gradle: new gradle completion.
+
2012-03-24 Mikael Magnusson <mikachu@gmail.com>
* 30371: Completion/Unix/Command/_ssh: You can specify -i
@@ -16120,5 +16125,5 @@
*****************************************************
* This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.5614 $
+* $Revision: 1.5615 $
*****************************************************
@@ -83,6 +83,7 @@ _go
_gpg
_gphoto2
_gprof
+_gradle
_graphicsmagick
_grep
_groff
@@ -0,0 +1,114 @@
+#compdef gradle gradlew
+
+local curcontext="$curcontext" ret=1 state state_descr line
+local gradle_inspect=yes cache_policy tag_order
+local -A opt_args
+local -a gradle_group_tasks gradle_all_tasks
+
+# Set the caching policy to invalidate cache if the build file is newer than the cache.
+_gradle_caching_policy() {
+ [[ $gradle_buildfile -nt $1 ]]
+}
+
+zstyle -s ":completion:*:*:$service:*" cache-policy cache_policy || \
+ zstyle ":completion:*:*:$service:*" cache-policy _gradle_caching_policy
+
+# By default, we only complete main tasks (belonging to a group). Secondary tasks are
+# completed if no main tasks are found.
+zstyle -a ":completion:*:*:$service:*" tag-order tag_order || \
+ zstyle ":completion:*:*:$service:*" tag-order 'gradle_group' 'gradle_all'
+
+# The completion inspects the current build file to find tasks to complete. Setting
+# this style to 'no' or 'false' turns off inspection. In that case only the built-in tasks
+# are completed.
+zstyle -T ":completion:*:*:$service:*" gradle-inspect || gradle_inspect=no
+
+_arguments -C \
+ '(-)'{-\?,-h,--help}'[Shows this help message.]' \
+ {-a,--no-rebuild}'[Do not rebuild project dependencies.]' \
+ {-b,--build-file}'[Specifies the build file.]:build file:_files -g "*.gradle(-.)"' \
+ {-C,--cache}'[Specifies how compiled build scripts should be cached.]:cache policy:(on rebuild)' \
+ {-c,--settings-file}'[Specifies the settings file.]:settings file:_files -g "*.properties(-.)"' \
+ '--continue[Continues task execution after a task failure.]' \
+ \*{-D+,--system-prop}'[Set system property of the JVM (e.g. -Dmyprop=myvalue).]:system property (prop=val):' \
+ '(-i --info -q --quiet)'{-d,--debug}'[Log in debug mode (includes normal stacktrace).]' \
+ '(--nodaemon)--daemon[Uses the Gradle daemon to run the build. Starts the daemon if not running.]' \
+ '--foreground[Starts the Gradle daemon in the foreground.]' \
+ {-g,--gradle-user-home}'[Specifies the gradle user home directory.]:home directory:_directories' \
+ '(-)--gui[Launches the Gradle GUI.]' \
+ {-I,--init-script}'[Specifies an initialization script.]:init script:_files -g "*.gradle(-.)"' \
+ '(-d --debug -q --quiet)'{-i,--info}'[Set log level to info.]' \
+ {-m,--dry-run}'[Runs the builds with all task actions disabled.]' \
+ '--no-color[Do not use color in the console output.]' \
+ '(--daemon)--no-daemon[Do not use the Gradle daemon to run the build.]' \
+ '--no-opt[Ignore any task optimization.]' \
+ '--offline[The build should operate without accessing network resources.]' \
+ \*{-P+,--project-prop}'[Set project property for the build script (e.g. -Pmyprop=myvalue).]:project property (prop=val):' \
+ {-p,--project-dir}'[Specifies the start directory for Gradle.]:start directory:_directories' \
+ '--profile[Profiles build execution time and generates a report in the <build_dir>/reports/profile directory.]' \
+ '--project-cache-dir[Specifies the project-specific cache directory.]:cache directory:_directories' \
+ '(-d --debug -i --info)'{-q,--quiet}'[Log errors only.]' \
+ "--refresh[Refresh the state of resources of the type(s) specified.]:refresh policy:(dependencies)" \
+ '(-s --stacktrace)'{-S,--full-stacktrace}'[Print out the full (very verbose) stacktrace for all exceptions.]' \
+ '(-S --full-stacktrace)'{-s,--stacktrace}'[Print out the stacktrace for all exceptions.]' \
+ '(-)--stop[Stops the Gradle daemon if it is running.]' \
+ {-u,--no-search-upward}"[Don't search in parent folders for a settings.gradle file.]" \
+ '(-)'{-v,--version}'[Print version info.]' \
+ {-x,--exclude-task}'[Specify a task to be excluded from execution.]:task to exclude:->alltask' \
+ '*:task:->task' \
+ && ret=0
+
+if [[ -n $state ]]; then
+ if [[ $gradle_inspect == yes ]]; then
+ # If a build file is specified after '-b' or '--build-file', use this file. Otherwise,
+ # default is the file 'build.gradle' in the current directory.
+ local gradle_buildfile=${${(v)opt_args[(i)-b|--build-file]}:-build.gradle}
+
+ if [[ -f $gradle_buildfile ]]; then
+ # Cache name is constructed from the absolute path of the build file.
+ local cache_name=${${gradle_buildfile:a}//[^[:alnum:]]/_}
+ if _cache_invalid $cache_name || ! _retrieve_cache $cache_name; then
+ zle -R "Generating cache from $gradle_buildfile"
+ local outputline
+ local -a match mbegin mend
+ # Run gradle/gradlew and retrieve possible tasks.
+ for outputline in ${(f)"$($service --build-file $gradle_buildfile -q tasks --all)"}; do
+ if [[ $outputline == [[:blank:]]#(#b)([[:alnum:]]##)' - '(*) ]]; then
+ # The descriptions of main tasks start at beginning of line, descriptions of
+ # secondary tasks are indented.
+ if [[ $outputline == [[:alnum:]]* ]]; then
+ gradle_group_tasks+=( "$match[1]:$match[2]" )
+ else
+ gradle_all_tasks+=( "$match[1]:$match[2]" )
+ fi
+ fi
+ done
+ _store_cache $cache_name gradle_group_tasks gradle_all_tasks
+ fi
+
+ if [[ $state == task ]]; then
+ _tags gradle_group gradle_all
+ while _tags; do
+ # Offer main tasks and secondary tasks in different tags.
+ _requested gradle_group && _describe 'group tasks' gradle_group_tasks && ret=0
+ _requested gradle_all && _describe 'secondary tasks' gradle_all_tasks && ret=0
+ (( ret )) || break
+ done
+ elif [[ $state == alltask ]]; then
+ # After '--exclude-task', we don't make a distinction between main tasks and
+ # secondary tasks.
+ _describe 'all tasks' gradle_group_tasks -- gradle_all_tasks && ret=0
+ fi
+ fi
+ else
+ _describe 'built-in tasks' '(
+ "dependencies:Displays the dependencies of root project."
+ "help:Displays a help message."
+ "projects:Displays the sub-projects of root project."
+ "properties:Displays the properties of root project."
+ "tasks:Displays the tasks runnable from root project."
+ )' && ret=0
+ fi
+fi
+
+return ret

0 comments on commit 8bb9818

Please sign in to comment.