Difference between revisions of "Rust"

From WikEmacs
Jump to navigation Jump to search
(spacemacs)
(toggle var mut)
Line 50: Line 50:
  
 
Protip: set breakpoints with "break file:line" instead of "rbreak" which can give an "unmatched quote" error.
 
Protip: 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:
 +
 +
<pre>let foo = bar;</pre>
 +
 +
Calling this function with the cursor anywhere on that line will change it to
 +
 +
<pre>let mut foo = bar;</pre>
 +
 +
<source lang="lisp">
 +
(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"))))
 +
</source>
 +
 +
To bind it to a key in rust-mode only:
 +
 +
<source lang="lisp">
 +
(add-hook 'rust-mode-hook
 +
          (lambda ()
 +
            (local-set-key (kbd "C-M-m") #'toggle-mut)))
 +
</source>
 +
(source: [https://www.reddit.com/r/rust/comments/3le943/emacs_function_for_toggling_variable_mutability/ reddit]).
  
 
[[Category:Programming languages]]
 
[[Category:Programming languages]]
 
[[Category:Programming]]
 
[[Category:Programming]]

Revision as of 15:01, 22 May 2017

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

Also note that Spacemacs has a Rust layer.

rust-mode

rust-mode (in MELPA) offers:

  • syntax highlighted,
  • 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 rustfmv

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 gbd and use rust-gdb to launch gdb with the Rust-specific pretty-printers enabled.

Protip: 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).