emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/rust-mode 2540d7e 262/486: Go back to the current line and


From: ELPA Syncer
Subject: [nongnu] elpa/rust-mode 2540d7e 262/486: Go back to the current line and column after formatting.
Date: Sat, 7 Aug 2021 09:25:32 -0400 (EDT)

branch: elpa/rust-mode
commit 2540d7eff0faa7e966b6c4391e53617800275f85
Author: Wilfred Hughes <me@wilfred.me.uk>
Commit: Wilfred Hughes <me@wilfred.me.uk>

    Go back to the current line and column after formatting.
    
    The previous approach simply moved to the same character offset. This is
    unlikely to preserve the position of point, as rustfmt often changes
    whitespace, changing the number of characters before point.
    
    Instead, we go back to the line number and column number we were on
    before. Provided that rustfmt has not radically changed the number of
    lines, this will typically put point back to its previous position, or
    at least close.
    
    Improves, but doesn't completely solve, issue #162.
---
 rust-mode.el | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/rust-mode.el b/rust-mode.el
index 1fbc3e8..99e4bb4 100644
--- a/rust-mode.el
+++ b/rust-mode.el
@@ -1270,10 +1270,16 @@ This is written mainly to be used as 
`end-of-defun-function' for Rust."
   (unless (executable-find rust-rustfmt-bin)
     (error "Could not locate executable \"%s\"" rust-rustfmt-bin))
 
-  (let ((cur-point (point))
+  (let ((cur-line (line-number-at-pos))
+        (cur-column (current-column))
         (cur-win-start (window-start)))
     (rust--format-call (current-buffer))
-    (goto-char cur-point)
+    ;; Move to the same line and column as before.  This is best
+    ;; effort: if rustfmt inserted lines before point, we end up in
+    ;; the wrong place. See issue #162.
+    (goto-char (point-min))
+    (forward-line (1- cur-line))
+    (forward-char cur-column)
     (set-window-start (selected-window) cur-win-start))
 
   ;; Issue #127: Running this on a buffer acts like a revert, and could cause



reply via email to

[Prev in Thread] Current Thread [Next in Thread]