Se eu entendi bem, isso só ocorre quando você usa o formulário rake test ...
. Então você pode usar este patch contra $fpath/_rake
diff --git a/Completion/Unix/Command/_rake b/Completion/Unix/Command/_rake
index 7fed949..96ee930 100644
--- a/Completion/Unix/Command/_rake
+++ b/Completion/Unix/Command/_rake
@@ -37,12 +37,16 @@ case "$state" in
;;
target)
local -a targets
- targets=( ${${(f)"$(_call_program targets $words[1] -sT $opt_args[(I)(-N|--nosearch)] ${(kv)opt_args[(I)(-f|--rakefile)]} 2>/dev/null)"}/(#b)rake ([^ ]##) ##\# (*)/${${match[1]}//:/\:}:${match[2]:l}} )
- if (( ! ${targets[(I)rake aborted!]} )) then
- _describe -t targets 'rake target' targets && ret=0
- else
- _message -e targets 'rake target'
- fi
+ if [[ $words[$((CURRENT-1))] == "test" ]]; then
+ _files && ret=0
+ else
+ targets=( ${${(f)"$(_call_program targets $words[1] -sT $opt_args[(I)(-N|--nosearch)] ${(kv)opt_args[(I)(-f|--rakefile)]} 2>/dev/null)"}/(#b)rake ([^ ]##) ##\# (*)/${${match[1]}//:/\:}:${match[2]:l}} )
+ if (( ! ${targets[(I)rake aborted!]} )) then
+ _describe -t targets 'rake target' targets && ret=0
+ else
+ _message -e targets 'rake target'
+ fi
+ fi
;;
esac
Esse patch, em princípio, adiciona a condição if [[ $words[$((CURRENT-1))] == "test" ]];
, que verifica se o argumento anterior é igual a "teste". E se assim for, arquivos e diretórios são retornados através da função _files
em vez de alvos de rake.