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

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

[nongnu] elpa/rust-mode 7724813 306/486: Merge pull request #206 from cj


From: ELPA Syncer
Subject: [nongnu] elpa/rust-mode 7724813 306/486: Merge pull request #206 from cjhowe7/master
Date: Sat, 7 Aug 2021 09:25:41 -0400 (EDT)

branch: elpa/rust-mode
commit 77248135153a6c15cfc35ff9d5db550a5b1a8197
Merge: 3220937 610fe1f
Author: Tom Tromey <tom@tromey.com>
Commit: GitHub <noreply@github.com>

    Merge pull request #206 from cjhowe7/master
    
    Allow formatting with long lines (fixes #186)
---
 rust-mode.el | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/rust-mode.el b/rust-mode.el
index 9f9e391..1a9d77d 100644
--- a/rust-mode.el
+++ b/rust-mode.el
@@ -1197,12 +1197,26 @@ This is written mainly to be used as 
`end-of-defun-function' for Rust."
   (with-current-buffer (get-buffer-create "*rustfmt*")
     (erase-buffer)
     (insert-buffer-substring buf)
-    (if (zerop (call-process-region (point-min) (point-max) rust-rustfmt-bin t 
t nil))
-        (progn
-          (if (not (string= (buffer-string) (with-current-buffer buf 
(buffer-string))))
-              (copy-to-buffer buf (point-min) (point-max)))
-          (kill-buffer))
-      (error "Rustfmt failed, see *rustfmt* buffer for details"))))
+    (let* ((tmpf (make-temp-file "rustfmt"))
+           (ret (call-process-region (point-min) (point-max) rust-rustfmt-bin
+                                     t `(t ,tmpf) nil)))
+      (unwind-protect
+          (cond
+           ((zerop ret)
+            (if (not (string= (buffer-string)
+                              (with-current-buffer buf (buffer-string))))
+                (copy-to-buffer buf (point-min) (point-max)))
+            (kill-buffer))
+           ((= ret 3)
+            (if (not (string= (buffer-string)
+                              (with-current-buffer buf (buffer-string))))
+                (copy-to-buffer buf (point-min) (point-max)))
+            (erase-buffer)
+            (insert-file-contents tmpf)
+            (error "Rustfmt could not format some lines, see *rustfmt* buffer 
for details"))
+           (t
+            (error "Rustfmt failed, see *rustfmt* buffer for details"))))
+      (delete-file tmpf))))
 
 (defconst rust--format-word 
"\\b\\(else\\|enum\\|fn\\|for\\|if\\|let\\|loop\\|match\\|struct\\|unsafe\\|while\\)\\b")
 (defconst rust--format-line "\\([\n]\\)")



reply via email to

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