about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/etc/emacs/rust-mode-tests.el43
-rw-r--r--src/etc/emacs/rust-mode.el16
2 files changed, 50 insertions, 9 deletions
diff --git a/src/etc/emacs/rust-mode-tests.el b/src/etc/emacs/rust-mode-tests.el
index 63c1a077c8c..a4e837958c9 100644
--- a/src/etc/emacs/rust-mode-tests.el
+++ b/src/etc/emacs/rust-mode-tests.el
@@ -570,6 +570,11 @@ fn indenting_middle_of_line() {
                pull_me_back_in();
 }
 }
+
+fn indented_already() {
+    
+    // The previous line already has its spaces
+}
 "
 
       ;; Symbol -> (line column)
@@ -596,7 +601,15 @@ fn indenting_middle_of_line() {
                                   (after-whitespace-indent-start (13 1))
                                   (after-whitespace-indent-target (13 8))
                                   (middle-pull-indent-start (15 19))
-                                  (middle-pull-indent-target (15 12))))
+                                  (middle-pull-indent-target (15 12))
+                                  (blank-line-indented-already-bol-start (20 0))
+                                  (blank-line-indented-already-bol-target (20 4))
+                                  (blank-line-indented-already-middle-start (20 2))
+                                  (blank-line-indented-already-middle-target (20 4))
+                                  (nonblank-line-indented-already-bol-start (21 0))
+                                  (nonblank-line-indented-already-bol-target (21 4))
+                                  (nonblank-line-indented-already-middle-start (21 2))
+                                  (nonblank-line-indented-already-middle-target (21 4))))
 
 (defun rust-get-buffer-pos (pos-symbol)
   "Get buffer position from POS-SYMBOL.
@@ -793,3 +806,31 @@ All positions are position symbols found in `rust-test-positions-alist'."
    'middle-pull-indent-start
    'middle-pull-indent-target
    #'indent-for-tab-command))
+
+(ert-deftest indent-line-blank-line-indented-already-bol ()
+  (rust-test-motion
+   rust-test-indent-motion-string
+   'blank-line-indented-already-bol-start
+   'blank-line-indented-already-bol-target
+   #'indent-for-tab-command))
+
+(ert-deftest indent-line-blank-line-indented-already-middle ()
+  (rust-test-motion
+   rust-test-indent-motion-string
+   'blank-line-indented-already-middle-start
+   'blank-line-indented-already-middle-target
+   #'indent-for-tab-command))
+
+(ert-deftest indent-line-nonblank-line-indented-already-bol ()
+  (rust-test-motion
+   rust-test-indent-motion-string
+   'nonblank-line-indented-already-bol-start
+   'nonblank-line-indented-already-bol-target
+   #'indent-for-tab-command))
+
+(ert-deftest indent-line-nonblank-line-indented-already-middle ()
+  (rust-test-motion
+   rust-test-indent-motion-string
+   'nonblank-line-indented-already-middle-start
+   'nonblank-line-indented-already-middle-target
+   #'indent-for-tab-command))
diff --git a/src/etc/emacs/rust-mode.el b/src/etc/emacs/rust-mode.el
index b304df8f14c..3a99af3446c 100644
--- a/src/etc/emacs/rust-mode.el
+++ b/src/etc/emacs/rust-mode.el
@@ -140,14 +140,14 @@
                     ;; Otherwise, we are continuing the same expression from the previous line,
                     ;; so add one additional indent level
                     (+ baseline rust-indent-offset))))))))))
-    (when (not (eq (current-indentation) indent))
-      ;; If we're at the beginning of the line (before or at the current
-      ;; indentation), jump with the indentation change.  Otherwise, save the
-      ;; excursion so that adding the indentations will leave us at the
-      ;; equivalent position within the line to where we were before.
-      (if (<= (current-column) (current-indentation))
-          (indent-line-to indent)
-        (save-excursion (indent-line-to indent))))))
+
+    ;; If we're at the beginning of the line (before or at the current
+    ;; indentation), jump with the indentation change.  Otherwise, save the
+    ;; excursion so that adding the indentations will leave us at the
+    ;; equivalent position within the line to where we were before.
+    (if (<= (current-column) (current-indentation))
+        (indent-line-to indent)
+      (save-excursion (indent-line-to indent)))))
 
 
 ;; Font-locking definitions and helpers