dab09cc0eec220f5c1a541ccb75449c62c20bdb4

Author
Oleg Grigoriev <mehanoid.ru@gmail.com>
Committer
GitHub <noreply@github.com>
Date

Message

feat(rake-fast): show task descriptions in autocomplete (#11653)

Diff

 1diff --git a/plugins/rake-fast/rake-fast.plugin.zsh b/plugins/rake-fast/rake-fast.plugin.zsh
 2index 19dab154bac9fd197dbd54e6479e6da6167205ab..86e5ed58603cbf045faa4526f021cbe902ba8f3b 100644
 3--- a/plugins/rake-fast/rake-fast.plugin.zsh
 4+++ b/plugins/rake-fast/rake-fast.plugin.zsh
 5@@ -1,5 +1,28 @@
 6+# The version of the format of .rake_tasks. If the output of _rake_generate
 7+# changes, incrementing this number will force it to regenerate
 8+_rake_tasks_version=2
 9+
10 _rake_does_task_list_need_generating () {
11-  [[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]] || { _is_rails_app && _tasks_changed }
12+  _rake_tasks_missing || _rake_tasks_version_changed || _rakefile_has_changes || { _is_rails_app && _tasks_changed }
13+}
14+
15+_rake_tasks_missing () {
16+  [[ ! -f .rake_tasks ]]
17+}
18+
19+_rake_tasks_version_changed () {
20+  local -a file_version
21+  file_version=`head -n 1 .rake_tasks | sed "s/^version\://"`
22+
23+  if ! [[ $file_version =~ '^[0-9]*$' ]]; then
24+    return true
25+  fi
26+
27+  [[ $file_version -ne $_rake_tasks_version ]]
28+}
29+
30+_rakefile_has_changes () {
31+  [[ Rakefile -nt .rake_tasks ]]
32 }
33 
34 _is_rails_app () {
35@@ -20,7 +43,14 @@ _tasks_changed () {
36 }
37 
38 _rake_generate () {
39-  rake --silent --tasks | cut -d " " -f 2 | sed 's/\[.*\]//g' > .rake_tasks
40+  echo "version:$_rake_tasks_version" > .rake_tasks
41+
42+  rake --silent --tasks --all \
43+    | sed "s/^rake //" | sed "s/\:/\\\:/g" \
44+    | sed "s/\[[^]]*\]//g" \
45+    | sed "s/ *# /\:/" \
46+    | sed "s/\:$//" \
47+    >> .rake_tasks
48 }
49 
50 _rake () {
51@@ -29,7 +59,10 @@ _rake () {
52       echo "\nGenerating .rake_tasks..." >&2
53       _rake_generate
54     fi
55-    compadd $(cat .rake_tasks)
56+    local -a rake_options
57+    rake_options=("${(@f)$(cat .rake_tasks)}")
58+    shift rake_options
59+    _describe 'rake tasks' rake_options
60   fi
61 }
62 compdef _rake rake