#+TITLE: Rust contribution layer for Spacemacs

[[file:img/rust.png]]

* Table of Contents                                         :TOC_4_gh:noexport:
 - [[#description][Description]]
 - [[#install][Install]]
   - [[#layer][Layer]]
   - [[#racer][Racer]]
   - [[#cargo][Cargo]]
   - [[#rustfmt][Rustfmt]]
 - [[#key-bindings][Key bindings]]

* Description
This layer supports [[http://www.rust-lang.org/][Rust]] development in Spacemacs.

It has auto-completion and navigation support through [[https://github.com/phildawes/racer][Racer]] and supports [[http://doc.crates.io/index.html][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.

** Racer
You must install [[https://github.com/phildawes/racer][Racer]] to use this. Make sure the =racer= binary is available in
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.

** 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
#+END_SRC

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~ | run the current test with Cargo             |
| ~SPC m c i~ | create a new project with Cargo (init)      |
| ~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 u~ | update dependencies with Cargo              |
| ~SPC m c x~ | execute a project with Cargo                |
| ~SPC m g g~ | jump to definition                          |
| ~SPC m t~   | run tests with Cargo                        |
