This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
spacemacs/layers/+lang/rust/README.org

5.4 KiB

Rust layer

/TakeV/spacemacs/media/commit/ff5b3ae2918b10e1e5a02754ddb9ac055600f5b6/layers/+lang/rust/img/rust.png

Description

This layer supports Rust development in Spacemacs.

Features:

  • Auto-completion and navigation support through lsp-mode or Racer
  • Interactive debugger using dap-mode
  • support for the Rust package manager Cargo

Install

Layer

To use this configuration layer, add it to your ~/.spacemacs. You will need to add rust to the existing dotspacemacs-configuration-layers list in this file.

Choosing a backend

To choose a default backend set the layer variable rust-backend:

  (rust :variables rust-backend 'racer)

Alternatively the lsp backend will be automatically chosen if the layer lsp is used and you did not specify any value for rust-backend.

Backend can be chosen on a per project basis using directory local variables (files named .dir-locals.el at the root of a project), an example to use the lsp backend:

  ;;; Directory Local Variables
  ;;; For more information see (info "(emacs) Directory Variables")

  ((rust-mode (rust-backend . lsp)))

Note: you can easily add a directory local variable with SPC f v d.

Racer

You must install Racer to use this backend. Make sure the racer binary is available in your PATH and to set the environment variable RUST_SRC_PATH, as described in the installation instructions.

To enable auto-completion, ensure that the auto-completion layer is enabled.

LSP

You must add lsp to the existing dotspacemacs-configuration-layers in your ~/.spacemacs.

Consult the installation command for the desired language server found at lsp-mode for instructions.

The default LSP server for Rust is rls, i.e. rust language server. To choose the experimental rust-analyzer, you need to set the layer variable lsp-rust-server of lsp layer:

(lsp :variables lsp-rust-server 'rust-analyzer)

**** Autocompletion
To enable auto-completion, ensure that the =auto-completion= layer is enabled.

By default, currently [[https://github.com/phildawes/racer][Racer]] is the only code completion backend of [[https://github.com/rust-lang/rls][rls]], so you also need to install it.

**** Debugger (dap integration)
To install the debug adapter you may run =M-x dap-gdb-lldb-setup= when you are on Linux or download it manually from [[https://marketplace.visualstudio.com/items?itemName=webfreak.debug][Native Debug]] and adjust =dap-gdb-lldb-path=.

** Cargo
[[http://doc.crates.io/index.html][Cargo]] is a project management command line tool for Rust. Installation
instructions can be found on the main page of [[http://doc.crates.io/index.html][Cargo]].

** Rustfmt
Format Rust code according to style guidelines using [[https://github.com/rust-lang-nursery/rustfmt][rustfmt]].

#+BEGIN_SRC sh
  cargo install rustfmt

To enable automatic buffer formatting on save, set the variable rust-format-on-save to t.

Key bindings

Key binding Description
SPC m = = reformat the buffer
SPC m c . repeat the last Cargo command
SPC m c C remove build artifacts with Cargo
SPC m c X execute a project example with Cargo
SPC m c c compile project with Cargo
SPC m c d generate documentation with Cargo
SPC m c e run benchmarks with Cargo
SPC m c f format all project files with rustfmt
SPC m c i create a new project with Cargo (init)
SPC m c l run linter (cargo-clippy) with Cargo
SPC m c n create a new project with Cargo (new)
SPC m c o run all tests in current file with Cargo
SPC m c s search for packages on crates.io with Cargo
SPC m c t run the current test with Cargo
SPC m c u update dependencies with Cargo
SPC m c x execute a project with Cargo
SPC m c v check (verify) a project with Cargo
SPC m g g jump to definition
SPC m h h describe symbol at point
SPC m t run tests with Cargo

debugger

Using the dap layer you'll get access to all the DAP key bindings, see the complete list of key bindings on the dap layer description.