1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-02 22:11:54 +02:00

Add support for multi-project builds to _gradle

This commit is contained in:
Marlon Richert 2021-09-17 16:05:53 +03:00 committed by Oliver Kiddle
parent 16ad7cec1b
commit 1e9013941e
2 changed files with 33 additions and 8 deletions

View file

@ -1,5 +1,8 @@
2021-09-28 Oliver Kiddle <opk@zsh.org> 2021-09-28 Oliver Kiddle <opk@zsh.org>
* Marlon Richert: 49423: Completion/Unix/Command/_gradle:
Add support for multi-project builds
* 49454: Completion/compdump: open dump file once only instead * 49454: Completion/compdump: open dump file once only instead
of reopening it for appends of reopening it for appends

View file

@ -1,9 +1,9 @@
#compdef gradle gradlew #compdef gradle gradlew
local curcontext="$curcontext" ret=1 state state_descr line local curcontext="$curcontext" ret=1 state state_descr line
local gradle_inspect=yes cache_policy tag_order local gradle_inspect=yes cache_policy tag_order filter=
local -A opt_args local -A opt_args
local -a gradle_group_tasks gradle_all_tasks local -aU gradle_group_tasks gradle_all_tasks tasks
# Set the caching policy to invalidate cache if the build file is newer than the cache. # Set the caching policy to invalidate cache if the build file is newer than the cache.
_gradle_caching_policy() { _gradle_caching_policy() {
@ -78,31 +78,53 @@ if [[ $words[CURRENT] != -* ]]; then
local -a match mbegin mend local -a match mbegin mend
# Run gradle/gradlew and retrieve possible tasks. # Run gradle/gradlew and retrieve possible tasks.
for outputline in ${(f)"$($service --build-file $gradle_buildfile -q tasks --all)"}; do for outputline in ${(f)"$($service --build-file $gradle_buildfile -q tasks --all)"}; do
if [[ $outputline == [[:blank:]]#(#b)([[:alnum:]]##)' - '(*) ]]; then # Subproject tasks are prefixed with one or more instances of [[:alnum:]]##\:
# Leaving out the prefix runs the task in all subprojects where it exists.
if [[ $outputline ==
[[:blank:]]#(#b)([[:alnum:]]##\:)#([[:alnum:]]##)' - '(*) ]]; then
# The descriptions of main tasks start at beginning of line, descriptions of # The descriptions of main tasks start at beginning of line, descriptions of
# secondary tasks are indented. # secondary tasks are indented.
if [[ $outputline == [[:alnum:]]* ]]; then if [[ $outputline == [[:alnum:]]* ]]; then
gradle_group_tasks+=( "$match[1]:$match[2]" ) gradle_group_tasks+=(
"$match[-2]:$match[-1]"
"${${(j::)match[1,-2]}//:/\:}:$match[-1]"
)
else else
gradle_all_tasks+=( "$match[1]:$match[2]" ) gradle_all_tasks+=(
"${${(j::)match[1,-2]}//:/\:}:$match[-1]"
)
fi fi
fi fi
done done
_store_cache $cache_name gradle_group_tasks gradle_all_tasks _store_cache $cache_name gradle_group_tasks gradle_all_tasks
fi fi
filter=
zstyle -T ":completion:${curcontext}:tasks" prefix-needed &&
[[ $PREFIX != ([[:alnum:]]##\:)## ]] &&
filter+="*\:*"
if [[ $state == task ]]; then if [[ $state == task ]]; then
_tags gradle_group gradle_all _tags gradle_group gradle_all
while _tags; do while _tags; do
# Offer main tasks and secondary tasks in different tags. # Offer main tasks and secondary tasks in different tags.
_requested gradle_group && _describe 'group task' gradle_group_tasks && ret=0 if _requested gradle_group; then
_requested gradle_all && _describe 'secondary task' gradle_all_tasks && ret=0 tasks=( ${gradle_group_tasks:#$~filter} )
_describe -t tasks 'group task' tasks &&
ret=0
fi
if _requested gradle_all; then
tasks=( ${gradle_all_tasks:#$~filter} )
_describe -t tasks 'secondary task' tasks &&
ret=0
fi
(( ret )) || break (( ret )) || break
done done
elif [[ $state == alltask ]]; then elif [[ $state == alltask ]]; then
# After '--exclude-task', we don't make a distinction between main tasks and # After '--exclude-task', we don't make a distinction between main tasks and
# secondary tasks. # secondary tasks.
_describe 'task' gradle_group_tasks -- gradle_all_tasks && ret=0 tasks=( ${gradle_group_tasks:#$~filter} ${gradle_all_tasks:#$~filter} )
_describe -t tasks 'task' tasks &&
ret=0
fi fi
fi fi
else else