]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix c-ts-common-comment-indent-new-line (bug#73900)
authorYuan Fu <casouri@gmail.com>
Tue, 29 Oct 2024 07:27:34 +0000 (00:27 -0700)
committerEshel Yaron <me@eshelyaron.com>
Tue, 29 Oct 2024 10:00:55 +0000 (11:00 +0100)
* lisp/progmodes/c-ts-common.el:
(c-ts-common-comment-indent-new-line): Delete trailing
whitespace before inserting newline.  The insert-line-break
function is the same as in c-indent-new-comment-line.

(cherry picked from commit 9aa186592634212fcdb2dbafdfd0c52a2475ba96)

lisp/progmodes/c-ts-common.el

index f68a6dc108de92a425c40089c43c5f9eeec8e045..64ae5753d2bd425ccbaa98a0e85e8e31af5f5744 100644 (file)
@@ -331,55 +331,61 @@ and /* */ comments.  SOFT works the same as in
   ;; is a // comment, insert a newline and a // prefix; if the current
   ;; line is in a /* comment, insert a newline and a * prefix.  No
   ;; auto-fill or other smart features.
-  (cond
-   ;; Line starts with //, or ///, or ////...
-   ;; Or //! (used in rust).
-   ((save-excursion
-      (beginning-of-line)
-      (re-search-forward
-       (rx "//" (group (* (any "/!")) (* " ")))
-       (line-end-position)
-       t nil))
-    (let ((offset (- (match-beginning 0) (line-beginning-position)))
-          (whitespaces (match-string 1)))
-      (if soft (insert-and-inherit ?\n) (newline 1))
-      (delete-region (line-beginning-position) (point))
-      (insert (make-string offset ?\s) "//" whitespaces)))
-
-   ;; Line starts with /* or /**.
-   ((save-excursion
-      (beginning-of-line)
-      (re-search-forward
-       (rx "/*" (group (? "*") (* " ")))
-       (line-end-position)
-       t nil))
-    (let ((offset (- (match-beginning 0) (line-beginning-position)))
-          (whitespace-and-star-len (length (match-string 1))))
-      (if soft (insert-and-inherit ?\n) (newline 1))
-      (delete-region (line-beginning-position) (point))
-      (insert
-       (make-string offset ?\s)
-       " *"
-       (make-string whitespace-and-star-len ?\s))))
-
-   ;; Line starts with *.
-   ((save-excursion
-      (beginning-of-line)
-      (looking-at (rx (group (* " ") (any "*|") (* " ")))))
-    (let ((prefix (match-string 1)))
-      (if soft (insert-and-inherit ?\n) (newline 1))
-      (delete-region (line-beginning-position) (point))
-      (insert prefix)))
-
-   ;; Line starts with whitespaces or no space.  This is basically the
-   ;; default case since (rx (* " ")) matches anything.
-   ((save-excursion
-      (beginning-of-line)
-      (looking-at (rx (* " "))))
-    (let ((whitespaces (match-string 0)))
-      (if soft (insert-and-inherit ?\n) (newline 1))
-      (delete-region (line-beginning-position) (point))
-      (insert whitespaces)))))
+  (let ((insert-line-break
+         (lambda ()
+          (delete-horizontal-space)
+          (if soft
+              (insert-and-inherit ?\n)
+            (newline (if allow-auto-fill nil 1))))))
+    (cond
+     ;; Line starts with //, or ///, or ////...
+     ;; Or //! (used in rust).
+     ((save-excursion
+        (beginning-of-line)
+        (re-search-forward
+         (rx "//" (group (* (any "/!")) (* " ")))
+         (line-end-position)
+         t nil))
+      (let ((offset (- (match-beginning 0) (line-beginning-position)))
+            (whitespaces (match-string 1)))
+        (funcall insert-line-break)
+        (delete-region (line-beginning-position) (point))
+        (insert (make-string offset ?\s) "//" whitespaces)))
+
+     ;; Line starts with /* or /**.
+     ((save-excursion
+        (beginning-of-line)
+        (re-search-forward
+         (rx "/*" (group (? "*") (* " ")))
+         (line-end-position)
+         t nil))
+      (let ((offset (- (match-beginning 0) (line-beginning-position)))
+            (whitespace-and-star-len (length (match-string 1))))
+        (funcall insert-line-break)
+        (delete-region (line-beginning-position) (point))
+        (insert
+         (make-string offset ?\s)
+         " *"
+         (make-string whitespace-and-star-len ?\s))))
+
+     ;; Line starts with *.
+     ((save-excursion
+        (beginning-of-line)
+        (looking-at (rx (group (* " ") (any "*|") (* " ")))))
+      (let ((prefix (match-string 1)))
+        (funcall insert-line-break)
+        (delete-region (line-beginning-position) (point))
+        (insert prefix)))
+
+     ;; Line starts with whitespaces or no space.  This is basically the
+     ;; default case since (rx (* " ")) matches anything.
+     ((save-excursion
+        (beginning-of-line)
+        (looking-at (rx (* " "))))
+      (let ((whitespaces (match-string 0)))
+        (funcall insert-line-break)
+        (delete-region (line-beginning-position) (point))
+        (insert whitespaces))))))
 
 ;; Font locking using doxygen parser
 (defvar c-ts-mode-doxygen-comment-font-lock-settings