Andersbakken/rtags@65113e2a13 -> Andersbakken/rtags@cdff9b47fc Emacs-Kotlin-Mode-Maintainers/kotlin-mode@0e4bafb31d -> Emacs-Kotlin-Mode-Maintainers/kotlin-mode@876cc27dc1 Groovy-Emacs-Modes/groovy-emacs-modes@99eaf70720 -> Groovy-Emacs-Modes/groovy-emacs-modes@84f89b68ec JuliaEditorSupport/julia-emacs@fe6f6f7a80 -> JuliaEditorSupport/julia-emacs@06f6fdb94c NixOS/nix-mode@3cca5b6527 -> NixOS/nix-mode@8e20de5ba7 OVYA/php-cs-fixer@c5b5d8a498 -> OVYA/php-cs-fixer@cc9a3624dc ProofGeneral/PG@bc86736abb -> ProofGeneral/PG@e2b4227e1f Raku/raku-mode@7496ad3a03 -> Raku/raku-mode@eaac071f17 Somelauw/evil-markdown@064fe9b476 -> Somelauw/evil-markdown@8e6cc68af8 StanfordLegion/terra-mode@eab9e59ded -> StanfordLegion/terra-mode@ceef8cae5b amake/flutter.el@960b63576a -> amake/flutter.el@81c524a43c ananthakumaran/tide@ccff099e94 -> ananthakumaran/tide@296c0e0e3a asok/projectile-rails@6a18ada356 -> asok/projectile-rails@30828afbfa beancount/beancount-mode@02fe03ee44 -> beancount/beancount-mode@dbafe6a73d bradyt/dart-mode@43975c9208 -> bradyt/dart-mode@3bac14200f brianc/jade-mode@4dbde92542 -> brianc/jade-mode@111460b056 brotzeit/rustic@6ca73bb3cc -> brotzeit/rustic@804ebfe029 cdominik/cdlatex@614a8d94f6 -> cdominik/cdlatex@f215b70c5c clojure-emacs/clojure-mode@3e426b3a47 -> clojure-emacs/clojure-mode@e1dc7caee7 cython/cython@fae33cf7d4 -> cython/cython@aea4e6b84b dgutov/robe@e1304d123d -> dgutov/robe@fd972e912d emacs-csharp/csharp-mode@093f0f21a9 -> emacs-csharp/csharp-mode@fe8a68e984 emacs-ess/ESS@4fefd0feaa -> emacs-ess/ESS@a7ce81bb76 emacs-geiser/gauche@66e51430bd -> emacs-geiser/gauche@fd52cbaed9 emacs-geiser/geiser@4099dce8f5 -> emacs-geiser/geiser@327ff01e5b emacs-lsp/lsp-metals@ca927e5a83 -> emacs-lsp/lsp-metals@695291761b emacs-php/php-mode@cbf2723264 -> emacs-php/php-mode@535aec8173 emacs-straight/auctex@ea410dce4f -> emacs-straight/auctex@3b0a080ae5 emacs-typescript/typescript.el@1043025d42 -> emacs-typescript/typescript.el@2a58631230 erlang/otp@645ea8110d -> erlang/otp@118cb37bd5 ethereum/emacs-solidity@5f6ef3156f -> ethereum/emacs-solidity@6f7bd1641e factor/factor@b989a860d1 -> factor/factor@7b451bb813 fsharp/emacs-fsharp-mode@93b1fbc31d -> fsharp/emacs-fsharp-mode@c90d762c06 fxbois/web-mode@8ef47935d6 -> fxbois/web-mode@61f057a6ba greghendershott/racket-mode@7f12cb1ff2 -> greghendershott/racket-mode@a879a8d67b haskell/haskell-mode@98ba392236 -> haskell/haskell-mode@8402caa341 hhvm/hack-mode@f9315be699 -> hhvm/hack-mode@4c1c2b0939 idris-hackers/idris-mode@f52ad0b477 -> idris-hackers/idris-mode@3cc9361b4c immerrr/lua-mode@2bd9077dd0 -> immerrr/lua-mode@5a9bee8d5f iyefrat/evil-tex@87445d4d23 -> iyefrat/evil-tex@aa0ddf8e76 jimhourihan/glsl-mode@b071120164 -> jimhourihan/glsl-mode@9b2e5f28e4 joaotavora/sly@41f4d65048 -> joaotavora/sly@540a8c5b9a jrblevin/markdown-mode@359347b2bb -> jrblevin/markdown-mode@862ae8addd jwiegley/emacs-async@9a8cd0c3d5 -> jwiegley/emacs-async@5d365ffc6a liblit/demangle-mode@aaef0bd77a -> liblit/demangle-mode@04f545adab necaris/conda.el@6db0720b6d -> necaris/conda.el@4de6eccda5 ocaml-ppx/ocamlformat@5dd6574d8f -> ocaml-ppx/ocamlformat@22a3707da3 ocaml/dune@75ecfe3421 -> ocaml/dune@4d0a47edd5 ocaml/merlin@5731826810 -> ocaml/merlin@e4791e2298 ocaml/merlin@5731826810 -> ocaml/merlin@e4791e2298 ocaml/tuareg@b59c422759 -> ocaml/tuareg@00faf47a7c pashky/restclient.el@2cc1fd3496 -> pashky/restclient.el@176d9cb655 polymode/polymode@7d1f822f08 -> polymode/polymode@54888d6c15 s-kostyaev/go-gen-test@44c202ac97 -> s-kostyaev/go-gen-test@35df36dcd5 seagle0128/grip-mode@c0ca789903 -> seagle0128/grip-mode@1c82e27bee smihica/emmet-mode@1acb821e01 -> smihica/emmet-mode@6b2e554f7f swift-emacs/swift-mode@1b47a09f1c -> swift-emacs/swift-mode@800efe2910 technomancy/fennel-mode@a908db8696 -> technomancy/fennel-mode@47152970a9 vspinu/company-math@a796053590 -> vspinu/company-math@45778f5731 yoshiki/yaml-mode@3a57058468 -> yoshiki/yaml-mode@63b637f846 ziglang/zig-mode@0babe7ec52 -> ziglang/zig-mode@aba01b6199
lang/rust
Description
This module adds support for the Rust language and integration for its tools,
e.g. cargo
.
- Code completion (
racer
or an LSP server) - Syntax checking (
flycheck
) - LSP support (for rust-analyzer and rls) (
rustic
) - Snippets
Module Flags
+lsp
to add support Language server protocol. Will use the first ofrust-analyzer
orrls
(in that order).
Hacks
- rustic has been modified not to automatically install lsp-mode or eglot if
they're missing. Doom expects you to have enabled the
:tools lsp
module yourself.
Prerequisites
Install
This module requires rust
, which can be acquired through rustup
.
Arch Linux
sudo pacman -S rustup
See also the Rust article on the Arch Wiki.
Note that when the Rust language has updates, you are to run rustup
such that
it doesn't upgrade itself:
rustup update --no-self-update
General
curl https://sh.rustup.rs -sSf | sh
Other Requirements
Additional requirements depend on the module's configuration:
- If
:editor format
is enabled, you'll needrustfmt
:rustup component add rustfmt-preview
. - Users without
+lsp
enabled will needracer
:cargo +nightly install racer
(with requires rust nightly edition). -
Users with
+lsp
enabled will need:rust-analyzer
orrls
-
Using the following commands requires:
cargo-process-check
:cargo install cargo-check
cargo-process-clippy
:rustup component add clippy-preview
Features
LSP support (rls or rust-analyzer)
This module supports LSP integration. For it to work you'll need:
- Either rust-analyzer or the Rust Language Server installed (e.g. through your OS package manager).
- The
:tools lsp
module enabled. - The
+lsp
flag on this module enabled.
Format on save
Enable the :editor format module's +onsave
flag to get formatting on save with
rustfmt. No additional configuration is necessary.
Keybinds
Binding | Description |
---|---|
<localleader> b a |
cargo audit |
<localleader> b b |
cargo build |
<localleader> b B |
cargo bench |
<localleader> b c |
cargo check |
<localleader> b C |
cargo clippy |
<localleader> b d |
cargo doc |
<localleader> b n |
cargo update |
<localleader> b o |
cargo outdated |
<localleader> b r |
cargo run |
<localleader> t a |
cargo test |
<localleader> t t |
run current test |
TODO Configuration
Enable RLS by default
If both rls
and rust-analyzer
are present on your system, rust-analyzer
is
selected by default. Modify rustic-lsp-server
to change the default:
;; in $DOOMDIR/config.el
(after! rustic
(setq rustic-lsp-server 'rls))
Enabling eglot support for Rust
Doom's :tools lsp
module has an +eglot
flag. Enable it and this module will
use eglot instead.
Troubleshooting
error[E0670]: `async fn` is not permitted in the 2015 edition
You may be seeing this error, despite having edition = "2018"
in your
Cargo.toml
. This error actually originates from rustfmt
, which the LSP
server tries to invoke on save (if you have rustic-format-on-save
or :editor
format
enabled).
To fix this your project needs a rustfmt.toml
with edition = "2018"
in it.