emacs-diffs
[Top][All Lists]
Advanced

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

emacs-29 7b7b2b95138 5/5: Fix c-ts-mode indent (bug#60873)


From: Yuan Fu
Subject: emacs-29 7b7b2b95138 5/5: Fix c-ts-mode indent (bug#60873)
Date: Thu, 19 Jan 2023 17:47:40 -0500 (EST)

branch: emacs-29
commit 7b7b2b95138e691f1b155060b91a8998e3905651
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>

    Fix c-ts-mode indent (bug#60873)
    
    * lisp/progmodes/c-ts-mode.el:
    (c-ts-mode--statement-offset): Handle the edge case.
    * test/lisp/progmodes/c-ts-mode-resources/indent.erts: Add a test.
---
 lisp/progmodes/c-ts-mode.el                         | 13 ++++++++++++-
 test/lisp/progmodes/c-ts-mode-resources/indent.erts | 13 +++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index 0cf77c21d83..3d887971f64 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -285,7 +285,18 @@ PARENT is NODE's parent."
         (cl-incf level)
         (save-excursion
           (goto-char (treesit-node-start node))
-          (cond ((bolp) nil)
+          ;; Add an extra level if the opening bracket is on its own
+          ;; line, except (1) it's at top-level, or (2) it's immedate
+          ;; parent is another block.
+          (cond ((bolp) nil) ; Case (1).
+                ((let ((parent-type (treesit-node-type
+                                     (treesit-node-parent node))))
+                   ;; Case (2).
+                   (and parent-type
+                        (string-match-p c-ts-mode-indent-block-type-regexp
+                                        parent-type)))
+                 nil)
+                ;; Add a level.
                 ((looking-back (rx bol (* whitespace))
                                (line-beginning-position))
                  (cl-incf level))))))
diff --git a/test/lisp/progmodes/c-ts-mode-resources/indent.erts 
b/test/lisp/progmodes/c-ts-mode-resources/indent.erts
index 70fce68b0ec..b8524432d02 100644
--- a/test/lisp/progmodes/c-ts-mode-resources/indent.erts
+++ b/test/lisp/progmodes/c-ts-mode-resources/indent.erts
@@ -92,6 +92,19 @@ int main()
 }
 =-=-=
 
+Name: Concecutive blocks (GNU Style) (bug#60873)
+
+=-=
+int
+main (int   argc,
+      char *argv[])
+{
+  {
+    int i = 0;
+  }
+}
+=-=-=
+
 Name: Multiline Parameter List (bug#60398)
 
 =-=



reply via email to

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