Let's setup Emacs for Rust development, shall we ?
- syntax highlighting,
- code formatting, optionally automatic,
- Imenu support,
- navigation by semantics (go to the beginning or end of the current defun), (see also helm-swoop, helm-ag, tags,…)
- playpen helpers (send the selected code to play.rust-lang.org),
In Debian testing and unstable you can also install it with
apt install elpa-rust-mode (but the MELPA way is prefered).
Code formatting with rustfmt
Formatting is also provided by this mode. If you want auto formatting everytime you save a buffer, put this in your Init File:
(setq rust-format-on-save t)
On-the-fly syntax checking: Flycheck-rust
See emacs-racer (also in MELPA) for documentation and screencasts. It provides:
- code completion of variables, functions and modules (not macros yet due to a racer limitation) (see also company-mode)
- jump to definition (bound to M-.)
- describe functions and types,
Run Cargo tasks
cargo.el ("cargo" in MELPA) gives us a set of key combinations to perform Cargo tasks within our Rust projects.
See also Compilation.
Use the built-in gdb and use rust-gdb to launch gdb with the Rust-specific pretty-printers enabled.
Function to toggle a variable mutability
Given a line:
let foo = bar;
Calling this function with the cursor anywhere on that line will change it to
let mut foo = bar;
(defun toggle-mut () "Toggles the mutability of the variable defined on the current line" (interactive) (save-excursion (back-to-indentation) (forward-word) (if (string= " mut" (buffer-substring (point) (+ (point) 4))) (delete-region (point) (+ (point) 4)) (insert " mut"))))
To bind it to a key in rust-mode only:
(add-hook 'rust-mode-hook (lambda () (local-set-key (kbd "C-M-m") #'toggle-mut)))