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

127 lines
5.4 KiB
Org Mode
Raw Normal View History

#+TITLE: Rust layer
2015-06-10 16:44:30 +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]]
- [[#choosing-a-backend][Choosing a backend]]
- [[#racer][Racer]]
- [[#lsp][LSP]]
- [[#autocompletion][Autocompletion]]
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:
- Auto-completion and navigation support through [[https://github.com/emacs-lsp/lsp-mode][lsp-mode]] or [[https://github.com/phildawes/racer][Racer]]
- Interactive debugger using [[https://github.com/emacs-lsp/dap-mode][dap-mode]]
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
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
** Choosing a backend
To choose a default backend set the layer variable =rust-backend=:
#+BEGIN_SRC elisp
(rust :variables rust-backend 'racer)
#+END_SRC
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:
#+BEGIN_SRC elisp
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((rust-mode (rust-backend . lsp)))
#+END_SRC
*Note:* you can easily add a directory local variable with ~SPC f v d~.
*** 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.
*** 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 [[https://github.com/emacs-lsp/lsp-mode][lsp-mode]] for instructions.
The default LSP server for Rust is [[https://github.com/rust-lang/rls][rls]], i.e. rust language server.
To choose the experimental [[https://github.com/rust-analyzer/rust-analyzer][rust-analyzer]], you need to set the layer variable =lsp-rust-server= of =lsp= layer:
#+BEGIN_SRC elisp
(lsp :variables lsp-rust-server 'rust-analyzer)
#+END_SRC
**** 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.
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
[[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
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
| Key binding | Description |
2016-08-07 15:37:12 +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 |
| ~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 |
| ~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 |
| ~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 |
| ~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
Using the =dap= layer you'll get access to all the DAP key bindings, see the
complete list of key bindings on the [[https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Btools/dap#key-bindings][dap layer description]].