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.
This commit is contained in:
Henrik Lissner 2018-07-06 22:38:01 +02:00
parent 372f02b6c0
commit f5f87ee0a3
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -6,42 +6,25 @@
(defvar-local +ruby-current-version nil (defvar-local +ruby-current-version nil
"The currently active ruby version.") "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 (def-package! enh-ruby-mode
:mode "\\.rb$" :mode "\\.rb\\'"
:mode "\\.rake$" :mode "\\.rake\\'"
:mode "\\.gemspec$" :mode "\\.gemspec\\'"
:mode "\\.\\(pry\\|irb\\)rc$" :mode "\\.\\(?:pry\\|irb\\)rc\\'"
:mode "/\\(Gem\\|Cap\\|Vagrant\\|Rake\\|Pod\\|Puppet\\|Berks\\)file$" :mode "/\\(?:Gem\\|Cap\\|Vagrant\\|Rake\\|Pod\\|Puppet\\|Berks\\)file\\'"
:config :config
(set-env! "RBENV_ROOT") (set-env! "RBENV_ROOT")
(add-hook 'enh-ruby-mode-hook #'flycheck-mode)
(set-electric! 'enh-ruby-mode :words '("else" "end" "elsif")) (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' (set-repl-handler! 'enh-ruby-mode #'inf-ruby) ; `inf-ruby'
;; FIXME: needed?? ;; so class and module pairs work
(after! smartparens-ruby (setq-hook! 'enh-ruby-mode-hook sp-max-pair-length 6)
(sp-local-pair 'enh-ruby-mode "{" "}"
:pre-handlers '(:rem sp-ruby-pre-handler)
:post-handlers '(:rem sp-ruby-post-handler)))
;; Version management with rbenv ;; Version management with rbenv
(defun +ruby|add-version-to-modeline () (defun +ruby|add-version-to-modeline ()
"Add version string to the major mode in the modeline." "Add version string to the major mode in the modeline."
@ -65,34 +48,40 @@ environment variables."
(setenv "RBENV_VERSION" version-str)))) (setenv "RBENV_VERSION" version-str))))
(add-hook 'enh-ruby-mode-hook #'+ruby|detect-rbenv-version))) (add-hook 'enh-ruby-mode-hook #'+ruby|detect-rbenv-version)))
(def-package! yard-mode :hook enh-ruby-mode) (def-package! yard-mode :hook enh-ruby-mode)
(def-package! rbenv (def-package! rbenv
:after enh-ruby-mode :after enh-ruby-mode
:when (executable-find "rbenv")
:config :config
(global-rbenv-mode)) (when (executable-find "rbenv")
(global-rbenv-mode +1)))
(def-package! rubocop (def-package! rubocop
:hook (enh-ruby-mode . rubocop-mode) :hook (enh-ruby-mode . rubocop-mode)
:config :config
(map! :map rubocop-mode (map! :map rubocop-mode-map
:localleader :localleader
:nv "f" #'rubocop-check-current-file :nv "f" #'rubocop-check-current-file
:nv "F" #'rubocop-autocorrect-current-file :nv "F" #'rubocop-autocorrect-current-file
:nv "p" #'rubocop-check-project :nv "p" #'rubocop-check-project
:nv "P" #'rubocop-autocorrect-project)) :nv "P" #'rubocop-autocorrect-project))
;; FIXME: Clean up all processes from this/inf-ruby when all the ruby buffers ;; FIXME: Clean up all processes from this/inf-ruby when all the ruby buffers
;; are closed ;; are closed
(def-package! robe (def-package! robe
:hook (enh-ruby-mode . robe-mode) :hook (enh-ruby-mode . robe-mode)
:init :init
;; robe-start erros if you hit no. ;; robe-start errors if you hit no.
;; FIXME: Once hit no, itll ask every time you open a new buffer. This is (defun +ruby|init-robe ()
;; defined behaviour but not what we want! (when (executable-find "ruby")
(when +ruby-ask-for-server (cl-letf (((symbol-function #'yes-or-no-p)
(add-hook! 'enh-ruby-mode-hook (ignore-errors (call-interactively #'robe-start)))) (lambda (&rest _) t)))
(ignore-errors (robe-start)))))
(add-hook 'enh-ruby-mode-hook #'+ruby|init-robe)
:config :config
(set-company-backend! 'robe-mode 'company-robe)) (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 ;; (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, ;; autoloaded, it seems silly to add this advice before rspec-mode is loaded,
;; so remove it anyway! ;; 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 :config
(remove-hook 'enh-ruby-mode-hook #'rspec-enable-appropriate-mode) (remove-hook 'enh-ruby-mode-hook #'rspec-enable-appropriate-mode)
(map! :map (rspec-mode-map rspec-verifiable-mode-map) (map! :map (rspec-mode-map rspec-verifiable-mode-map)
@ -125,17 +114,16 @@ environment variables."
:n "r" #'rspec-rerun :n "r" #'rspec-rerun
:n "a" #'rspec-verify-all :n "a" #'rspec-verify-all
:n "s" #'rspec-verify-single :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 (def-package! company-inf-ruby
:when (featurep! :completion company) :when (featurep! :completion company)
:after inf-ruby :after inf-ruby
:config (set-company-backend! 'inf-ruby-mode 'company-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))