From c21c6c0aa88a9391c6424ee55c3a9c04e8fb3ddf Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 12 Jan 2025 13:28:09 -0500 Subject: [PATCH] refactor!(ruby): remove robe BREAKING CHANGE: This removes the Robe package from the ruby module, which now relies on lsp-mode/eglot to provide those features with more consistency and less maintenance overhead. Ref: https://github.com/orgs/doomemacs/projects/5/views/1?pane=issue&itemId=69411568 Close: #8237 Fix: #6994 Fix: #3055 --- modules/lang/ruby/README.org | 22 +++++---------------- modules/lang/ruby/autoload.el | 21 -------------------- modules/lang/ruby/config.el | 36 ----------------------------------- modules/lang/ruby/packages.el | 1 - 4 files changed, 5 insertions(+), 75 deletions(-) delete mode 100644 modules/lang/ruby/autoload.el diff --git a/modules/lang/ruby/README.org b/modules/lang/ruby/README.org index d806e4b38..f59ad65d8 100644 --- a/modules/lang/ruby/README.org +++ b/modules/lang/ruby/README.org @@ -4,13 +4,9 @@ #+since: 1.3 * Description :unfold: -This module add Ruby and optional Ruby on Rails support to Emacs. - -- Code completion ([[doom-package:robe]]) -- Syntax checking ([[doom-package:flycheck]]) -- Jump-to-definitions ([[doom-package:robe]]) -- Bundler -- Rubocop integration ([[doom-package:flycheck]]) +This module add Ruby and optional Ruby on Rails support to Emacs. IDE features +(like code completion, jump-to-definition, etc) are provided by a supported LSP +client (recommended: [[https://github.com/Shopify/ruby-lsp][ruby-lsp]] or [[https://github.com/castwide/solargraph][solargraph]]). ** Maintainers - [[doom-user:][@hlissner]] @@ -21,8 +17,8 @@ This module add Ruby and optional Ruby on Rails support to Emacs. - +chruby :: Enable chruby integration. - +lsp :: - Enable LSP support for ~ruby-mode~. Requires [[doom-module::tools lsp]] and a langserver - (supports solargraph). + Enable LSP support for ~ruby-mode~. Requires [[doom-module::tools lsp]] and a + langserver (recommended: [[https://github.com/Shopify/ruby-lsp][ruby-lsp]] or [[https://github.com/castwide/solargraph][solargraph]]). - +rails :: Enable rails navigational commands, plus server+console integration. - +rbenv :: @@ -41,7 +37,6 @@ This module add Ruby and optional Ruby on Rails support to Emacs. - [[doom-package:minitest]] - [[doom-package:rake]] - [[doom-package:rbenv]] if [[doom-module:+rbenv]] -- [[doom-package:robe]] - [[doom-package:rspec-mode]] - [[doom-package:rubocop]] - [[doom-package:rvm]] if [[doom-module:+rvm]] @@ -71,7 +66,6 @@ These guides will help you install Ruby: Then run ~$ gem install rubocop~ to install rubocop. ** Formatter - Formatting is handled using the [[doom-module::editor format]] module via [[https://prettier.io/docs/en/install.html][prettier]]. * TODO Usage @@ -80,12 +74,6 @@ Formatting is handled using the [[doom-module::editor format]] module via [[http #+end_quote ** Commands -*** robe -| command | key / ex command | description | -|----------------------+--------------------+--------------------------------------------------------------------| -| ~robe-start~ | [[kbd:][ ']] | Open ruby lang server for auto-completions and jump to definitions | -| ~robe-rails-refresh~ | [[kbd:][ R]] | Refresh the lang server. | - *** projectile-rails The projectile-rails prefix is [[kbd:][ r]]: | command | key / ex command | description | diff --git a/modules/lang/ruby/autoload.el b/modules/lang/ruby/autoload.el deleted file mode 100644 index 47e5b1f73..000000000 --- a/modules/lang/ruby/autoload.el +++ /dev/null @@ -1,21 +0,0 @@ -;;; lang/ruby/autoload.el -*- lexical-binding: t; -*- - -;;;###autoload -(defun +ruby-cleanup-robe-servers-h () ; TODO Use me - "Clean up dangling inf robe processes if there are no more `ruby-mode' buffers -open." - ;; FIXME This should wait X seconds before cleaning up - (unless (or (not robe-mode) (doom-buffers-in-mode 'ruby-mode)) - (let (inf-buffer kill-buffer-query-functions) - (while (setq inf-buffer (robe-inf-buffer)) - (let ((process (get-buffer-process inf-buffer)) - confirm-kill-processes) - (when (processp process) - (kill-process (get-buffer-process inf-buffer)) - (kill-buffer inf-buffer))))))) - -;;;###autoload -(defun +ruby-robe-repl-handler () - "Start Robe and open a REPL (for `set-repl-handler!')." - (robe-start) - (robe-inf-buffer)) diff --git a/modules/lang/ruby/config.el b/modules/lang/ruby/config.el index 31db0bcd2..1420363c5 100644 --- a/modules/lang/ruby/config.el +++ b/modules/lang/ruby/config.el @@ -39,42 +39,6 @@ "{" #'ruby-toggle-block)) -(use-package! robe - :defer t - :init - (add-hook! 'ruby-mode-hook - (defun +ruby-init-robe-mode-maybe-h () - "Start `robe-mode' if `lsp-mode' isn't active." - (or (bound-and-true-p lsp-mode) - (bound-and-true-p lsp--buffer-deferred) - (robe-mode +1)))) - :config - (set-repl-handler! 'ruby-mode #'+ruby-robe-repl-handler) - (set-company-backend! 'ruby-mode 'company-robe 'company-dabbrev-code) - (set-lookup-handlers! 'ruby-mode - :definition #'robe-jump - :documentation #'robe-doc) - (when (boundp 'read-process-output-max) - ;; Robe can over saturate IPC, making interacting with it slow/clobbering - ;; the GC, so increase the amount of data Emacs reads from it at a time. - (setq-hook! '(robe-mode-hook inf-ruby-mode-hook) - read-process-output-max (* 1024 1024))) - (when (modulep! :editor evil) - (add-hook 'robe-mode-hook #'evil-normalize-keymaps)) - (map! :localleader - :map robe-mode-map - "'" #'robe-start - "h" #'robe-doc - "R" #'robe-rails-refresh - :prefix "s" - "d" #'ruby-send-definition - "D" #'ruby-send-definition-and-go - "r" #'ruby-send-region - "R" #'ruby-send-region-and-go - "i" #'ruby-switch-to-inf)) - - -;; NOTE Must be loaded before `robe-mode' (use-package! yard-mode :hook ruby-mode) diff --git a/modules/lang/ruby/packages.el b/modules/lang/ruby/packages.el index 35256c286..eca8a6ab0 100644 --- a/modules/lang/ruby/packages.el +++ b/modules/lang/ruby/packages.el @@ -12,7 +12,6 @@ ;; Programming environment (package! rubocop :pin "f5fd18aa810c3d3269188cbbd731ddc09006f8f5") -(package! robe :pin "ec4b7e74e93de3133924f3caca79bcea04fcc666") ;; Project tools (package! bundler :pin "43efb6be4ed118b06d787ce7fbcffd68a31732a7")