From f5f87ee0a3f8f5b29122ebb2b50551ed4c5240c4 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Fri, 6 Jul 2018 22:38:01 +0200 Subject: [PATCH] Refactor lang/ruby & remove +ruby-ask-for-server To conform to conventions and remove redundancies (like activating flycheck-mode, which is global now). Also, should now silently create a robe server. --- modules/lang/ruby/config.el | 78 ++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 45 deletions(-) diff --git a/modules/lang/ruby/config.el b/modules/lang/ruby/config.el index dd519630f..0757982ff 100644 --- a/modules/lang/ruby/config.el +++ b/modules/lang/ruby/config.el @@ -6,42 +6,25 @@ (defvar-local +ruby-current-version nil "The currently active ruby version.") -(defvar +ruby-ask-for-server t - "Ask for a server whenever you open a ruby buffer. -Robe will only ask once if you say yes, but if you say no and keep opening -buffers, itll ask every time.") +;; +;; Plugins +;; -;; FIXME: Add these? -;; does anyone actually use these? -;; (map! :map ruby-mode-map -;; :localleader -;; :prefix "r" -;; :nv "b" #'ruby-toggle-block -;; :nv "ec" #'ruby-refactor-extract-constant -;; :nv "el" #'ruby-refactor-extract-to-let -;; :nv "em" #'ruby-refactor-extract-to-method -;; :nv "ev" #'ruby-refactor-extract-local-variable -;; :nv "ad" #'ruby-refactor-add-parameter -;; :nv "cc" #'ruby-refactor-convert-post-conditional)) (def-package! enh-ruby-mode - :mode "\\.rb$" - :mode "\\.rake$" - :mode "\\.gemspec$" - :mode "\\.\\(pry\\|irb\\)rc$" - :mode "/\\(Gem\\|Cap\\|Vagrant\\|Rake\\|Pod\\|Puppet\\|Berks\\)file$" + :mode "\\.rb\\'" + :mode "\\.rake\\'" + :mode "\\.gemspec\\'" + :mode "\\.\\(?:pry\\|irb\\)rc\\'" + :mode "/\\(?:Gem\\|Cap\\|Vagrant\\|Rake\\|Pod\\|Puppet\\|Berks\\)file\\'" :config (set-env! "RBENV_ROOT") - (add-hook 'enh-ruby-mode-hook #'flycheck-mode) (set-electric! 'enh-ruby-mode :words '("else" "end" "elsif")) - (setq sp-max-pair-length 6) ;; so class and module work (set-repl-handler! 'enh-ruby-mode #'inf-ruby) ; `inf-ruby' - ;; FIXME: needed?? - (after! smartparens-ruby - (sp-local-pair 'enh-ruby-mode "{" "}" - :pre-handlers '(:rem sp-ruby-pre-handler) - :post-handlers '(:rem sp-ruby-post-handler))) + ;; so class and module pairs work + (setq-hook! 'enh-ruby-mode-hook sp-max-pair-length 6) + ;; Version management with rbenv (defun +ruby|add-version-to-modeline () "Add version string to the major mode in the modeline." @@ -65,34 +48,40 @@ environment variables." (setenv "RBENV_VERSION" version-str)))) (add-hook 'enh-ruby-mode-hook #'+ruby|detect-rbenv-version))) + (def-package! yard-mode :hook enh-ruby-mode) + (def-package! rbenv :after enh-ruby-mode - :when (executable-find "rbenv") :config - (global-rbenv-mode)) + (when (executable-find "rbenv") + (global-rbenv-mode +1))) + (def-package! rubocop :hook (enh-ruby-mode . rubocop-mode) :config - (map! :map rubocop-mode + (map! :map rubocop-mode-map :localleader :nv "f" #'rubocop-check-current-file :nv "F" #'rubocop-autocorrect-current-file :nv "p" #'rubocop-check-project :nv "P" #'rubocop-autocorrect-project)) + ;; FIXME: Clean up all processes from this/inf-ruby when all the ruby buffers ;; are closed (def-package! robe :hook (enh-ruby-mode . robe-mode) :init - ;; robe-start erros if you hit no. - ;; FIXME: Once hit no, itll ask every time you open a new buffer. This is - ;; defined behaviour but not what we want! - (when +ruby-ask-for-server - (add-hook! 'enh-ruby-mode-hook (ignore-errors (call-interactively #'robe-start)))) + ;; robe-start errors if you hit no. + (defun +ruby|init-robe () + (when (executable-find "ruby") + (cl-letf (((symbol-function #'yes-or-no-p) + (lambda (&rest _) t))) + (ignore-errors (robe-start))))) + (add-hook 'enh-ruby-mode-hook #'+ruby|init-robe) :config (set-company-backend! 'robe-mode 'company-robe)) @@ -116,7 +105,7 @@ environment variables." ;; (even for things unrelated to ruby/rspec). Even if the function were ;; autoloaded, it seems silly to add this advice before rspec-mode is loaded, ;; so remove it anyway! - (advice-remove 'compilation-buffer-name 'rspec-compilation-buffer-name-wrapper) + (advice-remove 'compilation-buffer-name #'rspec-compilation-buffer-name-wrapper) :config (remove-hook 'enh-ruby-mode-hook #'rspec-enable-appropriate-mode) (map! :map (rspec-mode-map rspec-verifiable-mode-map) @@ -125,17 +114,16 @@ environment variables." :n "r" #'rspec-rerun :n "a" #'rspec-verify-all :n "s" #'rspec-verify-single - :n "v" #'rspec-verify)) + :n "v" #'rspec-verify) + + ;; Evil integration + (when (featurep! :feature evil +everywhere) + (add-hook! '(rspec-mode-hook rspec-verifiable-mode-hook) + #'evil-normalize-keymaps))) + (def-package! company-inf-ruby :when (featurep! :completion company) :after inf-ruby :config (set-company-backend! 'inf-ruby-mode 'company-inf-ruby)) -;; -;; Evil integration -;; - -(when (featurep! :feature evil +everywhere) - (add-hook! '(rspec-mode-hook rspec-verifiable-mode-hook) - #'evil-normalize-keymaps))