#+TITLE: Rust layer #+TAGS: general|layer|multi-paradigm|programming [[file:img/rust.png]] * Table of Contents :TOC_5_gh:noexport: - [[#description][Description]] - [[#features][Features:]] - [[#install][Install]] - [[#layer][Layer]] - [[#backends][Backends]] - [[#racer][Racer]] - [[#lsp][LSP]] - [[#debugger-dap-integration][Debugger (dap integration)]] - [[#cargo][Cargo]] - [[#rustfmt][Rustfmt]] - [[#key-bindings][Key bindings]] - [[#debugger][debugger]] * Description This layer supports [[https://www.rust-lang.org][Rust]] development in Spacemacs. ** Features: - Auto-completion and navigation support through [[https://github.com/emacs-lsp/lsp-rust][lsp]] or [[https://github.com/phildawes/racer][Racer]] - support for the Rust package manager [[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. ** 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 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. To enable auto-completion, ensure that the =auto-completion= layer is enabled. **** 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 #+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~ | format all project files with rustfmt | | ~SPC m c i~ | create a new project with Cargo (init) | | ~SPC m c l~ | run linter ([[https://github.com/arcnmx/cargo-clippy][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 | 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 |