:lang rust
Fe2O3.unwrap().unwrap().unwrap().unwrap()
1. 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
1.1. Maintainers
This module has no dedicated maintainers. Become a maintainer?
1.2. Module flags
- +lsp
- Enable LSP support for
rustic-mode
. Requires :tools lsp and a langserver (supports rust-analyzer and rls).
1.4. 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.
2. Prerequisites
2.1. Install
This module requires rustc
, which can be acquired through rustup.
2.1.1. Arch Linux
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:
2.2. Other Requirements
Additional requirements depend on the module’s configuration:
- If :editor format is enabled, you’ll need rustfmt:
$ rustup component add rustfmt-preview
. - Users without +lsp will need
racer
:$ cargo +nightly install racer
(with requires rust nightly edition). - Users with +lsp will need rust-analyzer or rls
- Using the following commands requires:
cargo-process-check
:$ cargo install cargo-check
cargo-process-clippy
:$ rustup component add clippy-preview
3. Usage
3.1. 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.
3.2. Format on save
Enable the :editor format module’s +onsave flag to get formatting on save with rustfmt. No additional configuration is necessary.
3.3. 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 |
4. TODO Configuration
4.1. Enable RLS by default
4.2. Enabling eglot support for Rust
Doom’s :tools lsp module has an +eglot flag. Enable it and this module will use eglot instead.
5. Troubleshooting
5.1. 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.
6. TODO Appendix
This module has no appendix yet. Write one?