#+title: :lang rust #+subtitle: Fe2O3.unwrap().unwrap().unwrap().unwrap() #+created: September 30, 2015 #+since: 0.7 * Description :unfold: This module adds support for the Rust language and integration for its tools, e.g. ~cargo~. - Code completion ([[doom-package:racer]] or an LSP server) - Syntax checking ([[doom-package:flycheck]]) - LSP support (for rust-analyzer and rls) ([[doom-package:rustic]]) - Snippets ** Maintainers - @hlissner [[doom-contrib-maintainer:][Become a maintainer?]] ** Module flags - +lsp :: Enable LSP support for ~rustic-mode~. Requires [[doom-module::tools lsp]] and a langserver (supports [[https://rust-analyzer.github.io/][rust-analyzer]] and rls). - +tree-sitter :: Leverages tree-sitter for better syntax highlighting and structural text editing. Requires [[doom-module::tools tree-sitter]]. ** Packages - [[doom-package:rustic]] ** 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 section will be machine generated. Don't edit it by hand. /This module does not have a changelog yet./ * Installation [[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]] This module requires a working installation of [[https://www.rust-lang.org/][Rust]] for its more advanced features, and offer only syntax highlighting otherwise. The simplest way to install it is through [[https://rustup.rs][rustup]]: #+begin_src sh $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # And can be updated later with: $ rustup update --no-self-update #+end_src To install and manage Rust on Windows, consult [[https://forge.rust-lang.org/infra/other-installation-methods.html][Rust's official documentation]]. #+begin_quote 󰐃 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. #+end_quote ** 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 [[github:rust-analyzer/rust-analyzer][rust-analyzer]] (rls is supported, but [[https://blog.rust-lang.org/2022/07/01/RLS-deprecation.html][deprecated]]). - Using the following commands requires: - ~cargo-process-check~: ~$ cargo install cargo-check~ - ~cargo-process-clippy~: ~$ rustup component add clippy-preview~ * TODO Usage #+begin_quote 󱌣 /This module's usage documentation is incomplete./ [[doom-contrib-module:][Complete it?]] #+end_quote ** LSP support (rust-analyzer) This module supports [[https://github.com/rust-lang/rust-analyzer][rust-analyzer]] ([[https://github.com/rust-lang/rls][RLS]] too, but it is [[https://blog.rust-lang.org/2022/07/01/RLS-deprecation.html][deprecated]]), which must be installed outside of Emacs, typically with rustup or your OS package manager. Installation through rustup is simplest: #+begin_src sh $ rustup component add rust-analyzer rust-src #+end_src If your needs are more complex, consult [[https://rust-analyzer.github.io/manual.html#installation][rust-analyzer's documentation]]. Finally, enable Doom's [[doom-module::tools lsp]] module, and this module's [[doom-module:+lsp]] flag ([[id:01cffea4-3329-45e2-a892-95a384ab2338][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 | |---------------------+-----------------------------| | = b a= | ~cargo audit~ | | = b b= | ~cargo build~ | | = b B= | ~cargo bench~ | | = b c= | ~cargo check~ | | = b C= | ~cargo clippy~ | | = b d= | ~cargo doc~ | | = b n= | ~cargo update~ | | = b o= | ~cargo outdated~ | | = b r= | ~cargo run~ | | = t a= | ~cargo test~ | | = t t= | ~run current test~ | * TODO Configuration #+begin_quote 󱌣 /This module's configuration documentation is incomplete./ [[doom-contrib-module:][Complete it?]] #+end_quote ** 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 [[doom-report:][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./ [[doom-suggest-faq:][Ask one?]] * TODO Appendix #+begin_quote 󱌣 This module has no appendix yet. [[doom-contrib-module:][Write one?]] #+end_quote