lang/ruby: major refactor

Fixes #2700
This commit is contained in:
Henrik Lissner 2020-03-11 22:05:27 -04:00
parent ab1daebb85
commit f6242346f9
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -7,40 +7,45 @@
;;
;;; Packages
(after! ruby-mode
(setq ruby-insert-encoding-magic-comment nil)
(when (require 'enh-ruby-mode nil t)
(rassq-delete-all 'ruby-mode interpreter-mode-alist)))
(use-package! enh-ruby-mode
:mode ("\\.\\(?:pry\\|irb\\)rc\\'" . +ruby-init-h)
:mode ("\\.\\(?:rb\\|arb\\|axlsx\\|rake\\|rabl\\|ru\\|builder\\|gemspec\\|podspec\\|jbuilder\\|thor\\)\\'" . +ruby-init-h)
:mode ("/\\(?:Berks\\|Brew\\|Cap\\|Fast\\|Gem\\|Guard\\|Pod\\|Puppet\\|Rake\\|Thor\\|Vagrant\\)file\\'" . +ruby-init-h)
:interpreter ("j?ruby\\([0-9.]+\\)" . +ruby-init-h)
:preface
(defun +ruby-init-h ()
"Enable `enh-ruby-mode' if ruby is available, otherwise `ruby-mode'."
(if (executable-find "ruby")
(enh-ruby-mode)
(ruby-mode)))
(use-package! ruby-mode ; built-in
;; Other extensions are already registered in `auto-mode-alist' by `ruby-mode'
:mode "\\.\\(?:a?rb\\|aslsx\\)\\'"
:mode "/\\(?:Brew\\|Fast\\)file\\'"
:interpreter "j?ruby\\([0-9.]+\\)"
:config
(setq ruby-insert-encoding-magic-comment nil)
(set-electric! '(ruby-mode enh-ruby-mode) :words '("else" "end" "elsif"))
(set-repl-handler! '(ruby-mode enh-ruby-mode) #'inf-ruby)
(when (featurep! +lsp)
(add-hook 'enh-ruby-mode-local-vars-hook #'lsp!))
(add-hook! '(ruby-mode-local-vars-hook
enh-ruby-mode-local-vars-hook)
#'lsp!))
(after! company-dabbrev-code
(add-to-list 'company-dabbrev-code-modes 'enh-ruby-mode)
(add-to-list 'company-dabbrev-code-modes 'ruby-mode))
(pushnew 'company-dabbrev-code-modes 'enh-ruby-mode 'ruby-mode))
(after! inf-ruby
;; switch to inf-ruby from compile if we detect a breakpoint has been hit
(add-hook 'compilation-filter-hook #'inf-ruby-auto-enter))
;; so class and module pairs work
(setq-hook! (ruby-mode enh-ruby-mode) sp-max-pair-length 6))
(setq-hook! (ruby-mode enh-ruby-mode) sp-max-pair-length 6)
(map! :localleader
:map (ruby-mode-map enh-ruby-mode-map)
"[" #'enh-ruby-toggle-block
"{" #'enh-ruby-toggle-block))
(use-package! enh-ruby-mode
:when (executable-find "ruby")
:after ruby-mode
:config
;; If ruby is present, `enh-ruby-mode' provides superior (semantic) syntax
;; highlighting so use it instead.
(advice-add #'ruby-mode :override #'enh-ruby-mode))
(use-package! robe
@ -53,9 +58,9 @@
(bound-and-true-p lsp--buffer-deferred))
(robe-mode +1))))
:config
(set-repl-handler! 'enh-ruby-mode #'robe-start)
(set-company-backend! 'enh-ruby-mode 'company-robe 'company-dabbrev-code)
(set-lookup-handlers! 'enh-ruby-mode
(set-repl-handler! '(ruby-mode enh-ruby-mode) #'robe-start)
(set-company-backend! '(ruby-mode enh-ruby-mode) 'company-robe 'company-dabbrev-code)
(set-lookup-handlers! '(ruby-mode enh-ruby-mode)
:definition #'robe-jump
:documentation #'robe-doc)
(map! :localleader
@ -79,6 +84,7 @@
(use-package! rubocop
:hook (ruby-mode . rubocop-mode)
:hook (enh-ruby-mode . rubocop-mode)
:config
(map! :localleader
@ -96,9 +102,9 @@
:defer t
:init
(setq rake-cache-file (concat doom-cache-dir "rake.cache"))
(map! :after enh-ruby-mode
(map! :after ruby-mode
:localleader
:map enh-ruby-mode-map
:map (ruby-mode-map enh-ruby-mode-map)
:prefix "k"
"k" #'rake
"r" #'rake-rerun
@ -108,9 +114,9 @@
(use-package! bundler
:defer t
:init
(map! :after enh-ruby-mode
(map! :after ruby-mode
:localleader
:map enh-ruby-mode-map
:map (ruby-mode-map enh-ruby-mode-map)
:prefix "b"
"c" #'bundle-check
"C" #'bundle-console
@ -121,8 +127,8 @@
(use-package! chruby
:when (featurep! +chruby)
:hook (enh-ruby-mode . chruby-use-corresponding)
:hook (ruby-mode . chruby-use-corresponding)
:hook (enh-ruby-mode . chruby-use-corresponding)
:config
(setq rspec-use-rvm nil
rspec-use-chruby t))