]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix empty line indentation in c-ts-mode (bug#61997)
authorYuan Fu <casouri@gmail.com>
Wed, 8 Mar 2023 00:35:23 +0000 (16:35 -0800)
committerYuan Fu <casouri@gmail.com>
Wed, 8 Mar 2023 00:42:44 +0000 (16:42 -0800)
* lisp/progmodes/c-ts-mode.el:
(c-ts-mode--indent-styles): Handle the empty line case.
* test/lisp/progmodes/c-ts-mode-resources/indent.erts: New test.

* doc/lispref/modes.texi (Parser-based Indentation): Update manual.
* lisp/treesit.el (treesit-simple-indent-presets): Support null as
a value for NODE-TYPE in the 'match' matcher.

doc/lispref/modes.texi
lisp/progmodes/c-ts-mode.el
lisp/treesit.el
test/lisp/progmodes/c-ts-mode-resources/indent.erts

index c12224230fcc2381b4eb171eaf81af17a31be83f..fff1ea65b07f289805b76417bc7f346c7ea7b245 100644 (file)
@@ -5064,6 +5064,9 @@ first child where parent is @code{argument_list}, use
 (match nil "argument_list" nil nil 0 0)
 @end example
 
+In addition, @var{node-type} can be a special value @code{null},
+which matches when the value of @var{node} is @code{nil}.
+
 @item n-p-gp
 Short for ``node-parent-grandparent'', this matcher is a function of 3
 arguments: @var{node-type}, @var{parent-type}, and
index 0b775b2d5c8567465161211b2b780c36cc2458f5..fdd962ff020f5a4f322f0f258803345e84651816 100644 (file)
@@ -419,7 +419,9 @@ MODE is either `c' or `cpp'."
            ((parent-is "field_declaration_list") c-ts-mode--anchor-prev-sibling 0)
 
            ;; Statement in {} blocks.
-           ((match nil "compound_statement" nil 1 1) standalone-parent c-ts-mode-indent-offset)
+           ((or (match nil "compound_statement" nil 1 1)
+                (match null "compound_statement"))
+            standalone-parent c-ts-mode-indent-offset)
            ((parent-is "compound_statement") c-ts-mode--anchor-prev-sibling 0)
            ;; Opening bracket.
            ((node-is "compound_statement") standalone-parent c-ts-mode-indent-offset)
index 44a93f5e26136c4301909b82d67f05a493f2c7b0..c118f5d52a4307b2a7c7d24f27c96a35cd71cac6 100644 (file)
@@ -1107,9 +1107,11 @@ See `treesit-simple-indent-presets'.")
                 (&optional node-type parent-type node-field
                            node-index-min node-index-max)
                 (lambda (node parent &rest _)
-                  (and (or (null node-type)
-                           (string-match-p
-                            node-type (or (treesit-node-type node) "")))
+                  (and (pcase node-type
+                         ('nil t)
+                         ('null (null node))
+                         (_ (string-match-p
+                             node-type (or (treesit-node-type node) ""))))
                        (or (null parent-type)
                            (string-match-p
                             parent-type (treesit-node-type parent)))
@@ -1302,6 +1304,7 @@ MATCHER:
         (match nil \"argument_list\" nil nil 0 0).
 
     NODE-TYPE, PARENT-TYPE, and NODE-FIELD are regexps.
+    NODE-TYPE can also be `null', which matches when NODE is nil.
 
 no-node
 
index 77bfeb5ad6ee1d98ba1a8b0a31046ebc4d310bf6..9e28ef203fdc9e28adb88181aea676eaaf7dc28d 100644 (file)
@@ -418,3 +418,19 @@ required_matrix_height (struct window *w)
   |
 }
 =-=-=
+
+Name: Empty Line
+
+=-=
+int
+main (void)
+{
+|
+}
+=-=
+int
+main (void)
+{
+  |
+}
+=-=-=