Rust

From WikEmacs
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Let's setup Emacs for Rust development, shall we ?

Also note that Spacemacs has a ready to use Rust layer. If you wish other sanier defaults and configs, see Starter_Kits.

rust-mode

rust-mode (in MELPA) offers:

  • 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).


700px

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 flycheck-rust (on MELPA). See Flycheck.

Emacs-racer

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.

Debugging

Use the built-in gdb and use rust-gdb to launch gdb with the Rust-specific pretty-printers enabled.

Note: set breakpoints with "break file:line" instead of "rbreak" which can give an "unmatched quote" error.

Users snippets

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)))

(source: reddit).