spacemacs/layers/+lang/rust
Lucius Hu 24d9c3f7ee
[rust] Add key binding to switch lsp rust server
`lsp-mode` supports two LSP server backend for Rust language, i.e.
`rls` and `rust-analyzer`.

`rust-analyzer` is experimental and lacks certain functionalities
such as `DAP` support.

`lsp-mode` provides a function `lsp-rust-switch-server` that changes
the priority of LSP server backend for *new* LSP session.

This commit adds a key binding `SPC m s s` to `lsp-rust-switch-server`.
2020-02-13 19:27:32 +00:00
..
img
config.el [lsp] When used, make LSP the default backend for all supported lang 2019-09-30 00:49:44 -04:00
funcs.el [rust] Add key binding to switch lsp rust server 2020-02-13 19:27:32 +00:00
layers.el [core] Fix layer dependencies based on layer variables 2019-09-30 02:00:48 -04:00
packages.el Make rust-quick-run properly remove temp compilation function 2019-12-23 14:28:25 +01:00
README.org [rust] Add key binding to switch lsp rust server 2020-02-13 19:27:32 +00:00

Rust layer

/TakeV/spacemacs/media/commit/24d9c3f7ee84e03476bb8e0ddcdac548df7f05c8/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)
Switch to another LSP server

If both rls and rust-analyzer server are installed, you can press SPC m s s to select another LSP server backend, and press SPC m b r to restart the LSP server to finish the switching.

Autocompletion

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

By default, currently Racer is the only code completion backend of 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 Native Debug and adjust dap-gdb-lldb-path.

Cargo

Cargo is a project management command line tool for Rust. Installation instructions can be found on the main page of Cargo.

Rustfmt

Format Rust code according to style guidelines using rustfmt.

  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 s s switch to other LSP server backend
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.