summaryrefslogtreecommitdiff
path: root/plugins/gradle/gradle.plugin.zsh
diff options
context:
space:
mode:
authorErik Zivkovic <erik.zivkovic@gmail.com>2016-12-14 17:25:48 +0100
committerMarc Cornellà <marc.cornella@live.com>2016-12-14 17:25:48 +0100
commit3b13dc07d823ebcb67ea429de305b5413e99ac1e (patch)
tree61aeaa054a861c724524118906a0121798013c3a /plugins/gradle/gradle.plugin.zsh
parent26aae6b5834e1342d9b95a894a5bb24159b367bf (diff)
downloadzsh-3b13dc07d823ebcb67ea429de305b5413e99ac1e.tar.gz
zsh-3b13dc07d823ebcb67ea429de305b5413e99ac1e.tar.bz2
zsh-3b13dc07d823ebcb67ea429de305b5413e99ac1e.zip
gradle: extract simple task names from subproject tasks (#5704)
Currently, only tasks with complete subproject specifier are added to .gradletasknamecache. Gradle commands can be called for all (sub-)projects they are defined for, using their name as defined in the subproject, here called "simple" task names. One example is "gradle clean". This patch adds support for parsing out those "simple" task names from the list of fully specified task names. The .gradletasknamecache file will contain both the fully specified names, and the "simple" names for your autocompletion pleasure.
Diffstat (limited to 'plugins/gradle/gradle.plugin.zsh')
-rw-r--r--plugins/gradle/gradle.plugin.zsh27
1 files changed, 23 insertions, 4 deletions
diff --git a/plugins/gradle/gradle.plugin.zsh b/plugins/gradle/gradle.plugin.zsh
index b2015a351..65b9d4685 100644
--- a/plugins/gradle/gradle.plugin.zsh
+++ b/plugins/gradle/gradle.plugin.zsh
@@ -61,7 +61,7 @@ _gradle_does_task_list_need_generating () {
}
##############
-# Parse the tasks from `gradle(w) tasks --all` into .gradletasknamecache
+# Parse the tasks from `gradle(w) tasks --all` and return them to the calling function.
# All lines in the output from gradle(w) that are between /^-+$/ and /^\s*$/
# are considered to be tasks. If and when gradle adds support for listing tasks
# for programmatic parsing, this method can be deprecated.
@@ -76,7 +76,7 @@ _gradle_parse_tasks () {
task_name_buffer=""
elif [[ $line =~ ^\s*$ ]]; then
if [[ "$lines_might_be_tasks" = true ]]; then
- # If a newline is found, send the buffer to .gradletasknamecache
+ # If a newline is found, echo the buffer to the calling function
while read -r task; do
echo $task | awk '/[a-zA-Z0-9:-]+/ {print $1}'
done <<< "$task_name_buffer"
@@ -90,6 +90,25 @@ _gradle_parse_tasks () {
done <<< "$1"
}
+
+##############
+# Gradle tasks from subprojects are allowed to be executed without specifying
+# the subproject; that task will then be called on all subprojects.
+# gradle(w) tasks --all only lists tasks per subproject, but when autocompleting
+# we often want to be able to run a specific task on all subprojects, e.g.
+# "gradle clean".
+# This function uses the list of tasks from "gradle tasks --all", and for each
+# line grabs everything after the last ":" and combines that output with the original
+# output. The combined list is returned as the result of this function.
+##############
+_gradle_parse_and_extract_tasks () {
+ # All tasks
+ tasks=$(_gradle_parse_tasks "$1")
+ # Task name without sub project(s) prefix
+ simple_tasks=$(echo $tasks | awk 'BEGIN { FS = ":" } { print $NF }')
+ echo "$tasks\n$simple_tasks"
+}
+
##############################################################################
# Discover the gradle tasks by running "gradle tasks --all"
############################################################################
@@ -97,7 +116,7 @@ _gradle_tasks () {
if [[ -f build.gradle ]]; then
_gradle_arguments
if _gradle_does_task_list_need_generating; then
- _gradle_parse_tasks "$(gradle tasks --all)" > .gradletasknamecache
+ _gradle_parse_and_extract_tasks "$(gradle tasks --all)" > .gradletasknamecache
fi
compadd -X "==== Gradle Tasks ====" $(cat .gradletasknamecache)
fi
@@ -107,7 +126,7 @@ _gradlew_tasks () {
if [[ -f build.gradle ]]; then
_gradle_arguments
if _gradle_does_task_list_need_generating; then
- _gradle_parse_tasks "$(./gradlew tasks --all)" > .gradletasknamecache
+ _gradle_parse_and_extract_tasks "$(./gradlew tasks --all)" > .gradletasknamecache
fi
compadd -X "==== Gradlew Tasks ====" $(cat .gradletasknamecache)
fi