2017-06-08 11:47:56 +02:00
|
|
|
;;; lang/ruby/config.el -*- lexical-binding: t; -*-
|
2015-06-15 09:06:10 +02:00
|
|
|
|
2018-07-06 22:38:01 +02:00
|
|
|
;;
|
2018-09-07 19:36:16 -04:00
|
|
|
;; Packages
|
2018-07-06 22:38:01 +02:00
|
|
|
|
2018-07-06 23:31:57 +10:00
|
|
|
(def-package! enh-ruby-mode
|
2018-09-25 22:45:13 -04:00
|
|
|
:mode ("\\.\\(?:pry\\|irb\\)rc\\'" . +ruby|init)
|
|
|
|
:mode ("\\.\\(?:rb\\|rake\\|rabl\\|ru\\|builder\\|gemspec\\|jbuilder\\|thor\\)\\'" . +ruby|init)
|
|
|
|
:mode ("/\\(?:Berks\\|Cap\\|Gem\\|Guard\\|Pod\\|Puppet\\|Rake\\|Thor\\|Vagrant\\)file\\'" . +ruby|init)
|
|
|
|
:preface
|
|
|
|
(after! ruby-mode (require 'enh-ruby-mode))
|
|
|
|
(defun +ruby|init ()
|
|
|
|
"Enable `enh-ruby-mode' if ruby is available, otherwise `ruby-mode'."
|
|
|
|
(if (executable-find "ruby")
|
|
|
|
(enh-ruby-mode)
|
|
|
|
(ruby-mode)))
|
2016-05-01 01:10:30 -04:00
|
|
|
:config
|
2018-09-25 22:45:13 -04:00
|
|
|
(set-env! "RBENV_ROOT")
|
|
|
|
(set-electric! '(ruby-mode enh-ruby-mode) :words '("else" "end" "elsif"))
|
|
|
|
(set-repl-handler! '(ruby-mode enh-ruby-mode) #'inf-ruby)
|
|
|
|
|
2019-02-21 16:08:27 -05:00
|
|
|
(when (featurep! +lsp)
|
2019-03-02 01:33:54 -05:00
|
|
|
(add-hook 'enh-ruby-mode-hook #'lsp!))
|
2019-02-21 16:08:27 -05:00
|
|
|
|
2018-09-25 22:45:13 -04:00
|
|
|
(after! company-dabbrev-code
|
|
|
|
(add-to-list 'company-dabbrev-code-modes 'enh-ruby-mode nil #'eq)
|
|
|
|
(add-to-list 'company-dabbrev-code-modes 'ruby-mode nil #'eq))
|
2017-02-19 18:57:16 -05:00
|
|
|
|
2018-07-06 22:38:01 +02:00
|
|
|
;; so class and module pairs work
|
2019-03-01 15:12:27 -05:00
|
|
|
(setq-hook! (ruby-mode enh-ruby-mode) sp-max-pair-length 6))
|
2017-02-19 18:57:16 -05:00
|
|
|
|
2018-07-06 22:38:01 +02:00
|
|
|
|
2018-09-25 22:45:13 -04:00
|
|
|
(def-package! robe
|
2019-02-21 16:08:27 -05:00
|
|
|
:unless (featurep! +lsp)
|
2018-09-25 22:45:13 -04:00
|
|
|
:hook (enh-ruby-mode . robe-mode)
|
|
|
|
:config
|
|
|
|
(set-repl-handler! 'enh-ruby-mode #'robe-start)
|
|
|
|
(set-company-backend! 'enh-ruby-mode 'company-robe)
|
|
|
|
(set-lookup-handlers! 'enh-ruby-mode
|
|
|
|
:definition #'robe-jump
|
|
|
|
:documentation #'robe-doc)
|
|
|
|
(map! :localleader
|
|
|
|
:map robe-mode-map
|
2018-12-23 23:54:27 -05:00
|
|
|
"'" #'robe-start
|
2018-09-25 22:45:13 -04:00
|
|
|
;; robe mode specific
|
2018-12-23 23:54:27 -05:00
|
|
|
"h" #'robe-doc
|
|
|
|
"rr" #'robe-rails-refresh
|
2018-09-25 22:45:13 -04:00
|
|
|
;; inf-enh-ruby-mode
|
|
|
|
:prefix "s"
|
2018-12-23 23:54:27 -05:00
|
|
|
"f" #'ruby-send-definition
|
|
|
|
"F" #'ruby-send-definition-and-go
|
|
|
|
"r" #'ruby-send-region
|
|
|
|
"R" #'ruby-send-region-and-go
|
|
|
|
"i" #'ruby-switch-to-inf))
|
2018-09-25 22:45:13 -04:00
|
|
|
|
|
|
|
|
|
|
|
;; NOTE Must be loaded before `robe-mode'
|
|
|
|
(def-package! yard-mode
|
|
|
|
:hook (ruby-mode enh-ruby-mode))
|
2017-02-19 18:57:16 -05:00
|
|
|
|
2018-07-06 22:38:01 +02:00
|
|
|
|
2018-07-06 23:31:57 +10:00
|
|
|
(def-package! rubocop
|
2018-07-06 23:46:23 +10:00
|
|
|
:hook (enh-ruby-mode . rubocop-mode)
|
|
|
|
:config
|
2018-12-23 23:54:27 -05:00
|
|
|
(map! :localleader
|
|
|
|
:map rubocop-mode-map
|
|
|
|
"f" #'rubocop-check-current-file
|
|
|
|
"F" #'rubocop-autocorrect-current-file
|
|
|
|
"p" #'rubocop-check-project
|
|
|
|
"P" #'rubocop-autocorrect-project))
|
2015-12-04 15:44:06 -05:00
|
|
|
|
2018-07-06 22:38:01 +02:00
|
|
|
|
2018-09-25 22:45:13 -04:00
|
|
|
;;
|
|
|
|
;; Package & Ruby version management
|
|
|
|
|
|
|
|
(def-package! rake
|
|
|
|
:defer t
|
2018-07-06 23:31:57 +10:00
|
|
|
:init
|
2018-09-25 22:45:13 -04:00
|
|
|
(setq rake-cache-file (concat doom-cache-dir "rake.cache"))
|
|
|
|
(map! :after enh-ruby-mode
|
|
|
|
:localleader
|
|
|
|
:map enh-ruby-mode-map
|
|
|
|
:prefix "k"
|
2018-12-23 23:54:27 -05:00
|
|
|
"k" #'rake
|
|
|
|
"r" #'rake-rerun
|
|
|
|
"R" #'rake-regenerate-cache
|
|
|
|
"f" #'rake-find-task))
|
2018-09-25 22:45:13 -04:00
|
|
|
|
|
|
|
(def-package! bundler
|
|
|
|
:defer t
|
|
|
|
:init
|
|
|
|
(map! :after enh-ruby-mode
|
|
|
|
:localleader
|
|
|
|
:map enh-ruby-mode-map
|
|
|
|
:prefix "b"
|
2018-12-23 23:54:27 -05:00
|
|
|
"c" #'bundle-check
|
|
|
|
"C" #'bundle-console
|
|
|
|
"i" #'bundle-install
|
|
|
|
"u" #'bundle-update
|
|
|
|
"e" #'bundle-exec
|
|
|
|
"o" #'bundle-open))
|
2018-09-25 22:45:13 -04:00
|
|
|
|
|
|
|
;; `rvm'
|
|
|
|
(setq rspec-use-rvm t)
|
2018-07-06 23:31:57 +10:00
|
|
|
|
2018-09-25 22:45:13 -04:00
|
|
|
(after! rbenv
|
|
|
|
(add-to-list 'exec-path (expand-file-name "shims" rbenv-installation-dir)))
|
|
|
|
|
|
|
|
|
|
|
|
;;
|
|
|
|
;; Testing frameworks
|
2017-02-19 18:57:16 -05:00
|
|
|
|
2017-02-23 00:06:12 -05:00
|
|
|
(def-package! rspec-mode
|
2018-05-25 00:46:11 +02:00
|
|
|
:mode ("/\\.rspec\\'" . text-mode)
|
2015-08-13 12:14:41 -04:00
|
|
|
:init
|
|
|
|
(defvar evilmi-ruby-match-tags
|
|
|
|
'((("unless" "if") ("elsif" "else") "end")
|
|
|
|
("begin" ("rescue" "ensure") "end")
|
|
|
|
("case" ("when" "else") "end")
|
|
|
|
(("class" "def" "while" "do" "module" "for" "until") () "end")
|
|
|
|
;; Rake
|
|
|
|
(("task" "namespace") () "end")))
|
2018-06-11 14:21:35 +02:00
|
|
|
|
2019-03-14 00:03:12 -04:00
|
|
|
(when (featurep! :feature evil)
|
|
|
|
(add-hook 'rspec-mode-hook #'evil-normalize-keymaps))
|
2015-08-13 12:14:41 -04:00
|
|
|
:config
|
2018-12-23 23:54:27 -05:00
|
|
|
(map! :localleader
|
2017-02-28 12:11:18 -05:00
|
|
|
:prefix "t"
|
2019-03-12 09:21:56 +07:00
|
|
|
:map (rspec-verifiable-mode-map rspec-dired-mode-map)
|
2018-12-23 23:54:27 -05:00
|
|
|
"a" #'rspec-verify-all
|
2019-03-12 09:21:56 +07:00
|
|
|
"r" #'rspec-rerun
|
|
|
|
:map rspec-verifiable-mode-map
|
2018-12-23 23:54:27 -05:00
|
|
|
"v" #'rspec-verify
|
|
|
|
"c" #'rspec-verify-continue
|
|
|
|
"f" #'rspec-verify-method
|
|
|
|
"l" #'rspec-run-last-failed
|
|
|
|
"m" #'rspec-verify-matching
|
|
|
|
"t" #'rspec-toggle-spec-and-target-find-example
|
2019-03-01 09:35:28 +07:00
|
|
|
"T" #'rspec-toggle-spec-and-target
|
2019-03-12 09:21:56 +07:00
|
|
|
:map rspec-mode-map
|
2019-03-01 09:35:28 +07:00
|
|
|
"s" #'rspec-verify-single
|
2019-03-12 09:21:56 +07:00
|
|
|
"e" #'rspec-toggle-example-pendingness
|
|
|
|
:map rspec-dired-mode-map
|
|
|
|
"v" #'rspec-dired-verify
|
|
|
|
"s" #'rspec-dired-verify-single))
|
2018-09-25 22:45:13 -04:00
|
|
|
|
2019-03-14 00:03:12 -04:00
|
|
|
|
2018-09-25 22:45:13 -04:00
|
|
|
(def-package! minitest
|
|
|
|
:defer t
|
|
|
|
:config
|
|
|
|
(when (featurep! :feature evil)
|
|
|
|
(add-hook 'minitest-mode-hook #'evil-normalize-keymaps))
|
2018-12-23 23:54:27 -05:00
|
|
|
(map! :localleader
|
|
|
|
:map minitest-mode-map
|
2018-09-25 22:45:13 -04:00
|
|
|
:prefix "t"
|
2018-12-23 23:54:27 -05:00
|
|
|
"r" #'minitest-rerun
|
|
|
|
"a" #'minitest-verify-all
|
|
|
|
"s" #'minitest-verify-single
|
|
|
|
"v" #'minitest-verify))
|