Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions src/etc/emacs/rust-mode.el
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@

table))

(defcustom rust-indent-offset default-tab-width
"*Indent Rust code by this number of spaces.

The initializer is `DEFAULT-TAB-WIDTH'.")

(defun rust-paren-level () (nth 0 (syntax-ppss)))
(defun rust-in-str-or-cmnt () (nth 8 (syntax-ppss)))
(defun rust-rewind-past-str-cmnt () (goto-char (nth 8 (syntax-ppss))))
Expand All @@ -49,10 +54,10 @@
(let ((level (rust-paren-level)))
(cond
;; A function return type is 1 level indented
((looking-at "->") (* default-tab-width (+ level 1)))
((looking-at "->") (* rust-indent-offset (+ level 1)))

;; A closing brace is 1 level unindended
((looking-at "}") (* default-tab-width (- level 1)))
((looking-at "}") (* rust-indent-offset (- level 1)))

;; If we're in any other token-tree / sexp, then:
;; - [ or ( means line up with the opening token
Expand All @@ -70,18 +75,18 @@
(goto-char pt)
(back-to-indentation)
(if (looking-at "\\<else\\>")
(* default-tab-width (+ 1 level))
(* rust-indent-offset (+ 1 level))
(progn
(goto-char pt)
(beginning-of-line)
(rust-rewind-irrelevant)
(end-of-line)
(if (looking-back "[{};,]")
(* default-tab-width level)
(* rust-indent-offset level)
(back-to-indentation)
(if (looking-at "#")
(* default-tab-width level)
(* default-tab-width (+ 1 level))))))))))
(* rust-indent-offset level)
(* rust-indent-offset (+ 1 level))))))))))

;; Otherwise we're in a column-zero definition
(t 0))))))
Expand Down