Skip to content

Commit 4fe3903

Browse files
committed
Allow to override functions to change default behaviour of gradle completion per project
1 parent fa72b79 commit 4fe3903

File tree

3 files changed

+47
-5
lines changed

3 files changed

+47
-5
lines changed

README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,26 @@ export GRADLE_COMPLETION_UNQUALIFIED_TASKS="true"
155155

156156
You may need to invalidate the cache using the cache config above or by executing `touch build.gradle`.
157157

158+
159+
#### Overriding default completion behoviour per project
160+
If you need to customize this tool for one of your projects, just create `.gradle-completion` directory in your project root.
161+
Then place there empty `gradle-completion.bash` (for bash) and/or `_gradle` (for zsh) and fill it with redefined original functions only.
162+
Example content of `<path_to_your_gradle_project>/.gradle-completion/gradle-completion.bash`:
163+
164+
```bash
165+
# Overrides default function that generates completion cache
166+
__gradle-generate-tasks-cache() {
167+
__gradle-set-files-checksum
168+
169+
"${project_root_dir}"/gradlew initCompletionCache --completionCachePath="$cache_dir/$gradle_files_checksum" --no-scan
170+
echo "$gradle_files_checksum" >| "$cache_dir/$cache_name.md5"
171+
}
172+
173+
```
174+
175+
But do not hesitate to make PR to this repo to support more generic features straight away.
176+
177+
158178
## Troubleshooting
159179
If zsh completion isn't working, first try checking your `$fpath` with `echo $fpath`.
160180

_gradle

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,19 @@ __gradle-generate-tasks-cache() {
128128
echo $gradle_files_checksum >| $cache_dir/$cache_name.md5
129129
}
130130

131+
__gradle-source-project-overrides() {
132+
if [[ -f "$project_root_dir/.gradle-completion/_gradle" ]]; then
133+
# override default behaviours of this script
134+
source "$project_root_dir"/.gradle-completion/_gradle
135+
fi
136+
}
137+
131138
__gradle-completion-init() {
132139
local cache_dir cache_name gradle_build_file gradle_files_checksum project_root_dir
133-
__gradle-init-cache-dir
140+
134141
__gradle-set-project-root-dir
142+
__gradle-source-project-overrides
143+
__gradle-init-cache-dir
135144
__gradle-set-build-file
136145
if [[ -f $gradle_build_file ]]; then
137146
__gradle-set-cache-name
@@ -143,10 +152,9 @@ __gradle-completion-init() {
143152
}
144153

145154
__gradle_tasks() {
146-
local cache_dir cache_name gradle_build_file gradle_files_checksum project_root_dir
155+
local cache_dir cache_name gradle_build_file gradle_files_checksum
147156

148157
__gradle-init-cache-dir
149-
__gradle-set-project-root-dir
150158
__gradle-set-build-file
151159
if [[ -f $gradle_build_file ]]; then
152160
__gradle-set-cache-name
@@ -313,6 +321,7 @@ _gradle_dependency_configurations() {
313321
}
314322

315323
_gradle() {
324+
local project_root_dir
316325
local cur=${words[CURRENT]}
317326
local curcontext="$curcontext" state
318327
integer ret=1
@@ -385,6 +394,9 @@ _gradle() {
385394
{-x,--exclude-task}'[Specify a task to be excluded from execution.]' \
386395
'(-)*:: :->task-or-option' && ret=0
387396

397+
__gradle-set-project-root-dir
398+
__gradle-source-project-overrides
399+
388400
if [[ $words[CURRENT] != -* && $state != "argument-expected" ]]; then
389401
__gradle_tasks && ret=0
390402
else

gradle-completion.bash

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,6 @@ __gradle-tasks() {
184184
_get_comp_words_by_ref -n : cur
185185

186186
__gradle-init-cache-dir
187-
__gradle-set-project-root-dir
188187
__gradle-set-build-file
189188
if [[ -f "$gradle_build_file" ]]; then
190189
__gradle-set-cache-name
@@ -310,14 +309,22 @@ __gradle-generate-tasks-cache() {
310309
echo "$gradle_files_checksum" >| "$cache_dir/$cache_name.md5"
311310
}
312311

312+
__gradle-source-project-overrides() {
313+
if [[ -f "$project_root_dir/.gradle-completion/gradle-completion.bash" ]]; then
314+
# override default behaviours of this script
315+
source "$project_root_dir"/.gradle-completion/gradle-completion.bash
316+
fi
317+
}
318+
313319
__gradle-completion-init() {
314320
local cache_dir cache_name gradle_build_file gradle_files_checksum project_root_dir
315321

316322
local OLDIFS="$IFS"
317323
local IFS=$'\n'
318324

319-
__gradle-init-cache-dir
320325
__gradle-set-project-root-dir
326+
__gradle-source-project-overrides
327+
__gradle-init-cache-dir
321328
__gradle-set-build-file
322329
if [[ -f "$gradle_build_file" ]]; then
323330
__gradle-set-cache-name
@@ -342,6 +349,9 @@ _gradle() {
342349
local OLDIFS="$IFS"
343350
local IFS=$'\n'
344351

352+
__gradle-set-project-root-dir
353+
__gradle-source-project-overrides
354+
345355
if [[ ${cur} == --* ]]; then
346356
__gradle-long-options
347357
elif [[ ${cur} == -D* ]]; then

0 commit comments

Comments
 (0)