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 ;;; Packages
(after! ruby-mode (use-package! ruby-mode ; built-in
(setq ruby-insert-encoding-magic-comment nil) ;; Other extensions are already registered in `auto-mode-alist' by `ruby-mode'
(when (require 'enh-ruby-mode nil t) :mode "\\.\\(?:a?rb\\|aslsx\\)\\'"
(rassq-delete-all 'ruby-mode interpreter-mode-alist))) :mode "/\\(?:Brew\\|Fast\\)file\\'"
:interpreter "j?ruby\\([0-9.]+\\)"
(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)))
:config :config
(setq ruby-insert-encoding-magic-comment nil)
(set-electric! '(ruby-mode enh-ruby-mode) :words '("else" "end" "elsif")) (set-electric! '(ruby-mode enh-ruby-mode) :words '("else" "end" "elsif"))
(set-repl-handler! '(ruby-mode enh-ruby-mode) #'inf-ruby) (set-repl-handler! '(ruby-mode enh-ruby-mode) #'inf-ruby)
(when (featurep! +lsp) (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 (after! company-dabbrev-code
(add-to-list 'company-dabbrev-code-modes 'enh-ruby-mode) (pushnew 'company-dabbrev-code-modes 'enh-ruby-mode 'ruby-mode))
(add-to-list 'company-dabbrev-code-modes 'ruby-mode))
(after! inf-ruby (after! inf-ruby
;; switch to inf-ruby from compile if we detect a breakpoint has been hit ;; switch to inf-ruby from compile if we detect a breakpoint has been hit
(add-hook 'compilation-filter-hook #'inf-ruby-auto-enter)) (add-hook 'compilation-filter-hook #'inf-ruby-auto-enter))
;; so class and module pairs work ;; 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 (use-package! robe
@ -53,9 +58,9 @@
(bound-and-true-p lsp--buffer-deferred)) (bound-and-true-p lsp--buffer-deferred))
(robe-mode +1)))) (robe-mode +1))))
:config :config
(set-repl-handler! 'enh-ruby-mode #'robe-start) (set-repl-handler! '(ruby-mode enh-ruby-mode) #'robe-start)
(set-company-backend! 'enh-ruby-mode 'company-robe 'company-dabbrev-code) (set-company-backend! '(ruby-mode enh-ruby-mode) 'company-robe 'company-dabbrev-code)
(set-lookup-handlers! 'enh-ruby-mode (set-lookup-handlers! '(ruby-mode enh-ruby-mode)
:definition #'robe-jump :definition #'robe-jump
:documentation #'robe-doc) :documentation #'robe-doc)
(map! :localleader (map! :localleader
@ -79,6 +84,7 @@
(use-package! rubocop (use-package! rubocop
:hook (ruby-mode . rubocop-mode)
:hook (enh-ruby-mode . rubocop-mode) :hook (enh-ruby-mode . rubocop-mode)
:config :config
(map! :localleader (map! :localleader
@ -96,9 +102,9 @@
:defer t :defer t
:init :init
(setq rake-cache-file (concat doom-cache-dir "rake.cache")) (setq rake-cache-file (concat doom-cache-dir "rake.cache"))
(map! :after enh-ruby-mode (map! :after ruby-mode
:localleader :localleader
:map enh-ruby-mode-map :map (ruby-mode-map enh-ruby-mode-map)
:prefix "k" :prefix "k"
"k" #'rake "k" #'rake
"r" #'rake-rerun "r" #'rake-rerun
@ -108,9 +114,9 @@
(use-package! bundler (use-package! bundler
:defer t :defer t
:init :init
(map! :after enh-ruby-mode (map! :after ruby-mode
:localleader :localleader
:map enh-ruby-mode-map :map (ruby-mode-map enh-ruby-mode-map)
:prefix "b" :prefix "b"
"c" #'bundle-check "c" #'bundle-check
"C" #'bundle-console "C" #'bundle-console
@ -121,8 +127,8 @@
(use-package! chruby (use-package! chruby
:when (featurep! +chruby) :when (featurep! +chruby)
:hook (enh-ruby-mode . chruby-use-corresponding)
:hook (ruby-mode . chruby-use-corresponding) :hook (ruby-mode . chruby-use-corresponding)
:hook (enh-ruby-mode . chruby-use-corresponding)
:config :config
(setq rspec-use-rvm nil (setq rspec-use-rvm nil
rspec-use-chruby t)) rspec-use-chruby t))