2017-08-28 15:33:55 +00:00
#+TITLE : Rust layer
2015-06-10 16:44:30 +00:00
2019-05-07 08:53:56 +00:00
#+TAGS : general|layer|multi-paradigm|programming
2019-05-05 17:26:40 +00:00
2015-06-10 16:44:30 +00:00
[[file:img/rust.png ]]
2019-05-07 20:05:06 +00:00
* Table of Contents :TOC_5_gh:noexport:
2017-05-22 14:16:12 +00:00
- [[#description ][Description ]]
2017-08-28 21:58:10 +00:00
- [[#features ][Features: ]]
2017-05-22 14:16:12 +00:00
- [[#install ][Install ]]
- [[#layer ][Layer ]]
2018-10-28 21:43:11 +00:00
- [[#backends ][Backends ]]
- [[#racer ][Racer ]]
- [[#lsp ][LSP ]]
2019-04-18 16:32:10 +00:00
- [[#debugger-dap-integration ][Debugger (dap integration) ]]
2017-05-22 14:16:12 +00:00
- [[#cargo ][Cargo ]]
- [[#rustfmt ][Rustfmt ]]
- [[#key-bindings ][Key bindings ]]
2019-04-18 16:32:10 +00:00
- [[#debugger ][debugger ]]
2015-06-10 16:44:30 +00:00
* Description
2019-01-13 18:09:06 +00:00
This layer supports [[https://www.rust-lang.org ][Rust ]] development in Spacemacs.
2015-06-10 16:44:30 +00:00
2017-08-28 21:58:10 +00:00
** Features:
2018-10-28 21:43:11 +00:00
- Auto-completion and navigation support through [[https://github.com/emacs-lsp/lsp-rust ][lsp ]] or [[https://github.com/phildawes/racer ][Racer ]]
2017-08-28 21:58:10 +00:00
- support for the Rust package manager [[http://doc.crates.io/index.html ][Cargo ]]
2015-06-10 16:44:30 +00:00
* Install
** Layer
2016-01-06 05:21:55 +00:00
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.
2015-06-10 16:44:30 +00:00
2018-10-28 21:43:11 +00:00
** Backends
The backend is dependent upon the =rust-backend= layer configuration variable.
The possible vaules for =rust-backend= are =lsp= or =racer= with =racer= being the default.
*** Racer
You must install [[https://github.com/phildawes/racer ][Racer ]] to use this backend. Make sure the =racer= binary is available in
2016-01-10 12:36:56 +00:00
your =PATH= and to set the environment variable =RUST_SRC_PATH= , as described in
the [[https://github.com/phildawes/racer#installation ][installation instructions ]].
To enable auto-completion, ensure that the =auto-completion= layer is enabled.
2018-10-28 21:43:11 +00:00
*** LSP
2019-01-10 20:03:57 +00:00
You must add =lsp= to the existing =dotspacemacs-configuration-layers= in your =~/.spacemacs= .
2018-10-28 21:43:11 +00:00
2019-01-10 20:03:57 +00:00
Consult the installation command for the desired language server found at [[https://github.com/emacs-lsp/lsp-mode ][lsp-mode ]] for instructions.
2018-10-28 21:43:11 +00:00
To enable auto-completion, ensure that the =auto-completion= layer is enabled.
2019-04-18 16:32:10 +00:00
**** 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= .
2015-06-10 16:44:30 +00:00
** Cargo
2015-06-10 21:16:01 +00:00
[[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 ]].
2015-06-10 16:44:30 +00:00
2016-01-11 14:43:22 +00:00
** Rustfmt
Format Rust code according to style guidelines using [[https://github.com/rust-lang-nursery/rustfmt ][rustfmt ]].
#+BEGIN_SRC sh
2018-09-19 03:54:47 +00:00
cargo install rustfmt
2016-01-11 14:43:22 +00:00
#+END_SRC
2016-02-17 13:37:27 +00:00
To enable automatic buffer formatting on save, set the variable =rust-format-on-save= to =t= .
2016-01-11 14:43:22 +00:00
2015-06-10 16:44:30 +00:00
* Key bindings
2018-12-05 03:03:03 +00:00
| Key binding | Description |
2016-08-07 15:37:12 +00:00
|-------------+---------------------------------------------|
2018-10-28 21:43:11 +00:00
| ~SPC m = =~ | reformat the buffer |
2016-08-07 15:37:12 +00:00
| ~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 |
2017-12-08 04:04:05 +00:00
| ~SPC m c f~ | format all project files with rustfmt |
2016-08-07 15:37:12 +00:00
| ~SPC m c i~ | create a new project with Cargo (init) |
2017-06-26 09:14:48 +00:00
| ~SPC m c l~ | run linter ([[https://github.com/arcnmx/cargo-clippy][cargo-clippy]]) with Cargo |
2016-08-07 15:37:12 +00:00
| ~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 |
2017-12-08 04:04:05 +00:00
| ~SPC m c t~ | run the current test with Cargo |
2016-08-07 15:37:12 +00:00
| ~SPC m c u~ | update dependencies with Cargo |
| ~SPC m c x~ | execute a project with Cargo |
2018-01-18 04:17:50 +00:00
| ~SPC m c v~ | check (verify) a project with Cargo |
2016-08-07 15:37:12 +00:00
| ~SPC m g g~ | jump to definition |
2016-08-28 10:21:45 +00:00
| ~SPC m h h~ | describe symbol at point |
2016-08-07 15:37:12 +00:00
| ~SPC m t~ | run tests with Cargo |
2019-04-18 16:32:10 +00:00
** debugger
| Key binding | Description |
|---------------+---------------------------------|
| ~SPC m d d d~ | start debugging |
| ~SPC m d d l~ | debug last configuration |
| ~SPC m d d r~ | debug recent configuration |
|---------------+---------------------------------|
| ~SPC m d c~ | continue |
| ~SPC m d i~ | step in |
| ~SPC m d o~ | step out |
| ~SPC m d s~ | next step |
| ~SPC m d v~ | inspect value at point |
| ~SPC m d r~ | restart frame |
|---------------+---------------------------------|
| ~SPC m d .~ | debug transient state |
|---------------+---------------------------------|
| ~SPC m d a~ | abandon current session |
| ~SPC m d A~ | abandon all process |
|---------------+---------------------------------|
| ~SPC m d e e~ | eval |
| ~SPC m d e r~ | eval region |
| ~SPC m d e t~ | eval value at point |
|---------------+---------------------------------|
| ~SPC m d S s~ | switch session |
| ~SPC m d S t~ | switch thread |
| ~SPC m d S f~ | switch frame |
|---------------+---------------------------------|
| ~SPC m d I i~ | inspect |
| ~SPC m d I r~ | inspect region |
| ~SPC m d I t~ | inspect value at point |
|---------------+---------------------------------|
| ~SPC m d b b~ | toggle a breakpoint |
| ~SPC m d b c~ | change breakpoint condition |
| ~SPC m d b l~ | change breakpoint log condition |
| ~SPC m d b h~ | change breakpoint hit count |
| ~SPC m d b a~ | add a breakpoint |
| ~SPC m d b d~ | delete a breakpoint |
| ~SPC m d b D~ | clear all breakpoints |
|---------------+---------------------------------|
| ~SPC m d '_~ | Run debug REPL |
|---------------+---------------------------------|
| ~SPC m d w l~ | list local variables |
| ~SPC m d w o~ | goto output buffer if present |
| ~SPC m d w s~ | list sessions |
| ~SPC m d w b~ | list breakpoints |