3c8a33364f64975970839eeded921c3ed85ad507

Author
Marc Cornellà <marc.cornella@live.com>
Committer
GitHub <noreply@github.com>
Date

Message

Merge pull request #5343 from mcornella/rake-fast-plugin-refactor

Repost of #5319 and refactor of rake-fast plugin

Diff

  1diff --git a/plugins/rake-fast/README.md b/plugins/rake-fast/README.md
  2index f56142f6953260546a1856f7e91d8f961328fa23..1417befa15cef23b3ca3184fbbd7e950331f38b7 100644
  3--- a/plugins/rake-fast/README.md
  4+++ b/plugins/rake-fast/README.md
  5@@ -2,22 +2,34 @@
  6 
  7 Fast rake autocompletion plugin.
  8 
  9-This script caches the output for later usage and significantly speeds it up. It generates a .rake_tasks cache file in parallel to the Rakefile. It also checks the file modification dates to see if it needs to regenerate the cache file.
 10+This plugin caches the output for later usage and significantly speeds it up.
 11+It generates a `.rake_tasks` cache file in parallel to the Rakefile. It also
 12+checks the file modification time to see if it needs to regenerate the cache
 13+file.
 14 
 15-This is entirely based on [this pull request by Ullrich Schäfer](https://github.com/robb/.dotfiles/pull/10/), which is inspired by [this Ruby on Rails trick from 2006](http://weblog.rubyonrails.org/2006/3/9/fast-rake-task-completion-for-zsh/).
 16+This is entirely based on [this pull request by Ullrich Schäfer](https://github.com/robb/.dotfiles/pull/10/),
 17+which is inspired by [this Ruby on Rails trick from 2006](http://weblog.rubyonrails.org/2006/3/9/fast-rake-task-completion-for-zsh/).
 18 
 19 Think about that. 2006.
 20 
 21+----------
 22+
 23+Since August of 2016, it also checks if it's in a Rails project and looks at
 24+rake files inside `lib/tasks` and their modification time to know if the
 25+cache file needs to be regenerated.
 26+
 27 ## Installation
 28 
 29 Just add the plugin to your `.zshrc`:
 30 
 31-```bash
 32-plugins=(foo bar rake-fast)
 33+```zsh
 34+plugins=(... rake-fast)
 35 ```
 36 
 37 You might consider adding `.rake_tasks` to your [global .gitignore](https://help.github.com/articles/ignoring-files#global-gitignore)
 38 
 39 ## Usage
 40 
 41-`rake`, then press tab
 42+Type `rake`, then press tab.
 43+
 44+If you want to force the regeneration of the `.rake_tasks` file, run `rake_refresh`.
 45diff --git a/plugins/rake-fast/rake-fast.plugin.zsh b/plugins/rake-fast/rake-fast.plugin.zsh
 46index 57d699abcddc4562ecb50b4e7b244f571ddf4968..ca80d86e129649073612aca6587b29662864fba9 100644
 47--- a/plugins/rake-fast/rake-fast.plugin.zsh
 48+++ b/plugins/rake-fast/rake-fast.plugin.zsh
 49@@ -1,26 +1,22 @@
 50-_rake_refresh () {
 51-  if [ -f .rake_tasks ]; then
 52-    rm .rake_tasks
 53-  fi
 54-  echo "Generating .rake_tasks..." > /dev/stderr
 55-  _rake_generate
 56-  cat .rake_tasks
 57-}
 58-
 59 _rake_does_task_list_need_generating () {
 60-  [[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]] || (_is_rails_app && _tasks_changed)
 61+  [[ ! -f .rake_tasks ]] || [[ Rakefile -nt .rake_tasks ]] || { _is_rails_app && _tasks_changed }
 62 }
 63 
 64 _is_rails_app () {
 65-  [[ -e "bin/rails" ]] || [ -e "script/rails" ]
 66+  [[ -e "bin/rails" ]] || [[ -e "script/rails" ]]
 67 }
 68 
 69 _tasks_changed () {
 70-  local is_changed=1
 71-  for file in lib/tasks/**/*.rake; do
 72-    if [[ $file -nt .rake_tasks ]]; then is_changed=0; fi
 73+  local -a files
 74+  files=(lib/tasks lib/tasks/**/*(N))
 75+
 76+  for file in $files; do
 77+    if [[ "$file" -nt .rake_tasks ]]; then
 78+      return 0
 79+    fi
 80   done
 81-  return is_changed
 82+
 83+  return 1
 84 }
 85 
 86 _rake_generate () {
 87@@ -28,14 +24,20 @@ _rake_generate () {
 88 }
 89 
 90 _rake () {
 91-  if [ -f Rakefile ]; then
 92+  if [[ -f Rakefile ]]; then
 93     if _rake_does_task_list_need_generating; then
 94-      echo "\nGenerating .rake_tasks..." > /dev/stderr
 95+      echo "\nGenerating .rake_tasks..." >&2
 96       _rake_generate
 97     fi
 98-    compadd `cat .rake_tasks`
 99+    compadd $(cat .rake_tasks)
100   fi
101 }
102-
103 compdef _rake rake
104-alias rake_refresh='_rake_refresh'
105+
106+rake_refresh () {
107+  [[ -f .rake_tasks ]] && rm -f .rake_tasks
108+
109+  echo "Generating .rake_tasks..." >&2
110+  _rake_generate
111+  cat .rake_tasks
112+}