doomemacs/modules/lang/rust
Henrik Lissner 037b018cdd
feat: add .doommodule files
These optional dotfiles indicate the root of a module or module
group (:lang), and will later contain module metadata. They will also
serve as an alternative to packages.el and doctor.el, and will aide the
parts of the v3.0 module API concerned with resolving the current module
from a path (`doom-module-from-path`), which currently rely too heavily
on parsing path strings.

For now, however, they're simply placeholders.
2024-09-14 20:47:39 -04:00
..
.doommodule feat: add .doommodule files 2024-09-14 20:47:39 -04:00
autoload.el refactor!(rust): remove racer and default to +lsp 2022-09-07 01:25:18 +02:00
config.el fix(ligatures): activate prettify-symbols-mode conditionally 2024-09-13 23:07:14 -04:00
doctor.el refactor: deprecate featurep! for modulep! 2022-08-14 20:43:35 +02:00
packages.el bump: :lang 2024-09-07 19:04:37 -04:00
README.org docs(*): replace all-the-icons with nerd-icons 2023-09-16 20:19:11 +02:00

:lang rust

Description   unfold

This module adds support for the Rust language and integration for its tools, e.g. cargo.

Maintainers

Module flags

+lsp
Enable LSP support for rustic-mode. Requires doom-module::tools lsp and a langserver (supports rust-analyzer and rls).
+tree-sitter
Leverages tree-sitter for better syntax highlighting and structural text editing. Requires doom-module::tools tree-sitter.

Hacks

  • rustic has been modified not to automatically install lsp-mode or eglot if they're missing. Doom expects you to have enabled the doom-module::tools lsp module yourself.

TODO Changelog

This module does not have a changelog yet.

Installation

Enable this module in your doom! block.

This module requires a working installation of Rust for its more advanced features, and offer only syntax highlighting otherwise. The simplest way to install it is through rustup:

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# And can be updated later with:
$ rustup update --no-self-update

To install and manage Rust on Windows, consult Rust's official documentation.

󰐃 Once installed, I recommended that you add Cargo's executable to your $PATH, so that the Emacs utilities that depend on it or any tools installed through it can easily locate them (without any added configuration on your part).

Also, if you have used $ doom env in the past, changes to your $PATH won't be visible to Doom until you run it (or $ doom sync) again.

Other Requirements

  • If doom-module::editor format is enabled, you'll need rustfmt: $ rustup component add rustfmt.
  • Users with doom-module:+lsp enabled will need rust-analyzer (rls is supported, but deprecated).
  • Using the following commands requires:

    • cargo-process-check: $ cargo install cargo-check
    • cargo-process-clippy: $ rustup component add clippy-preview

TODO Usage

󱌣 This module's usage documentation is incomplete. Complete it?

LSP support (rust-analyzer)

This module supports rust-analyzer (RLS too, but it is deprecated), which must be installed outside of Emacs, typically with rustup or your OS package manager.

Installation through rustup is simplest:

$ rustup component add rust-analyzer rust-src

If your needs are more complex, consult rust-analyzer's documentation.

Finally, enable Doom's doom-module::tools lsp module, and this module's doom-module:+lsp flag (how to enable modules and their flags), and you're good to go!

Format on save

Enable doom-module::editor format +onsave 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

󱌣 This module's configuration documentation is incomplete. Complete it?

Enabling eglot support for Rust

Doom's doom-module::tools lsp module has an doom-module:+eglot flag. Enable it and this module will use eglot instead.

Troubleshooting

Report an issue?

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-trigger or [[doom-module::editor format]] enabled).

To fix this your project needs a rustfmt.toml with edition = "2018" in it.

Frequently asked questions

This module has no FAQs yet. Ask one?

TODO Appendix

󱌣 This module has no appendix yet. Write one?