diff --git a/modules/lang/rust/README.org b/modules/lang/rust/README.org index 6d8f26132..0abdb7be1 100644 --- a/modules/lang/rust/README.org +++ b/modules/lang/rust/README.org @@ -13,6 +13,7 @@ - [[#keybinds][Keybinds]] - [[#configuration][Configuration]] - [[#enable-rust-analyzer][Enable rust-analyzer]] + - [[#enabling-elgot-support-for-rust][Enabling elgot support for Rust]] - [[#troubleshooting][Troubleshooting]] * Description @@ -73,11 +74,22 @@ and the ~+lsp~ flag on this module. * TODO Configuration ** Enable rust-analyzer -You'll need [[https://github.com/rust-analyzer/rust-analyzer][rust-analyzer]] installed on your system, then add the following to -=$DOOMDIR/config.el=: +You'll need [[https://github.com/rust-analyzer/rust-analyzer][rust-analyzer]] installed on your system, then use the following: #+BEGIN_SRC elisp +;; in $DOOMDIR/config.el (setq lsp-rust-server 'rust-analyzer) #+END_SRC +** Enabling elgot support for Rust +Doom doesn't have eglot support (yet), but if you've installed it yourself and +want rust to use eglot instead of LSP, use the following: + +#+BEGIN_SRC elisp +;; in $DOOMDIR/config.el +(after! rustic + (setq rustic-lsp-server 'rust-analyzer ; optional + rustic-lsp-client 'eglot)) +#+END_SRC + * TODO Troubleshooting diff --git a/modules/lang/rust/config.el b/modules/lang/rust/config.el index adc3c3f4b..3f4652b5f 100644 --- a/modules/lang/rust/config.el +++ b/modules/lang/rust/config.el @@ -46,7 +46,23 @@ :desc "cargo run" "r" #'rustic-cargo-run) (:prefix ("t" . "cargo test") :desc "all" "a" #'rustic-cargo-test - :desc "current test" "t" #'rustic-cargo-current-test))) + :desc "current test" "t" #'rustic-cargo-current-test)) + + (defadvice! +rust--dont-install-packages-p (orig-fn &rest args) + :around #'rustic-setup-lsp + (cl-letf (;; `rustic-setup-lsp' uses `package-installed-p' to determine if + ;; lsp-mode/elgot are available. This breaks because Doom doesn't + ;; use package.el to begin with (and lazy loads it). + ((symbol-function #'package-installed-p) + (lambda (pkg) + (require pkg nil t))) + ;; If lsp/elgot isn't available, it attempts to install lsp-mode + ;; via package.el. Doom manages its own dependencies so we disable + ;; that behavior. + ((symbol-function #'rustic-install-lsp-client-p) + (lambda (&rest _) + (message "No RLS server running")))) + (apply orig-fn args)))) (use-package! racer