Configuring Emacs for Rust Development
Emacs is great for editing Rust
source files. In addition to your normal Emacs configuration (such as completion modes) it requires 3 packages. First you will want lsp-mode
, a very full featured LSP client for Emacs. Additionally you will want lsp-ui
, which I only use for the lsp-ui-imenu
feature.
Finally you will want to use rustic
as primary editing mode for Rust
files.
elisp code snippet start
;; For all setttings see: https://emacs-lsp.github.io/lsp-mode/tutorials/how-to-turn-off/
(use-package lsp-mode
:ensure t
:init
;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
(setq lsp-keymap-prefix "C-c C-l"
lsp-inlay-hint-enable t)
:custom
(lsp-lens-enable nil)
(lsp-headerline-breadcrumb-enable nil)
(lsp-rust-analyzer-cargo-watch-command "clippy")
;; enable / disable the hints as you prefer:
(lsp-inlay-hint-enable t)
;; These are optional configurations. See https://emacs-lsp.github.io/lsp-mode/page/lsp-rust-analyzer/#lsp-rust-analyzer-display-chaining-hints for a full list
(lsp-rust-analyzer-display-lifetime-elision-hints-enable "skip_trivial")
(lsp-rust-analyzer-display-chaining-hints t)
(lsp-rust-analyzer-display-lifetime-elision-hints-use-parameter-names nil)
(lsp-rust-analyzer-display-closure-return-type-hints t)
(lsp-rust-analyzer-display-parameter-hints nil)
(lsp-rust-analyzer-display-reborrow-hints nil)
(lsp-signature-auto-activate t)
:hook (;; replace XXX-mode with concrete major-mode(e. g. python-mode)
(rustic-mode . lsp)
;; if you want which-key integration
(lsp-mode . lsp-ui-mode)
(lsp-mode . lsp-enable-which-key-integration))
:commands lsp)
(use-package lsp-ui
:ensure t
:commands lsp-ui-mode
:after lsp-mode
:custom
(lsp-ui-peek-always-show nil)
(lsp-ui-sideline-show-hover nil)
(lsp-ui-doc-enable t)
)
(use-package rustic
:ensure
:bind (:map rustic-mode-map
("M-j" . lsp-ui-imenu)
("M-?" . lsp-find-references)
("C-c C-c l" . flycheck-list-errors)
("C-c C-c a" . lsp-execute-code-action)
("C-c C-c r" . lsp-rename)
("C-c C-c q" . lsp-workspace-restart)
("C-c C-c Q" . lsp-workspace-shutdown)
("C-c C-c s" . lsp-rust-analyzer-status))
:config
;; uncomment for less flashiness
;; (setq lsp-eldoc-hook nil)
;; (setq lsp-enable-symbol-highlighting nil)
;; (setq lsp-signature-auto-activate nil)
;; comment to disable rustfmt on save
(setq rustic-format-on-save t)
)
elisp code snippet end
Many of these settings I have taken from Robert Krahn’s configuration.