]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix c-ts-mode indentation
authorYuan Fu <casouri@gmail.com>
Sun, 5 Mar 2023 23:01:54 +0000 (15:01 -0800)
committerYuan Fu <casouri@gmail.com>
Sun, 5 Mar 2023 23:01:54 +0000 (15:01 -0800)
Not the subject of it, but mentioned in bug#61893.

* lisp/progmodes/c-ts-mode.el (c-ts-mode--anchor-prev-sibling): Skip
the sibling if it doesn't start on it's own line.
* test/lisp/progmodes/c-ts-mode-resources/indent.erts: New test.

lisp/progmodes/c-ts-mode.el
test/lisp/progmodes/c-ts-mode-resources/indent.erts

index f40bbc57eb5032c0ff4bb26c3320ebdb52d8d722..ee4a3bb2de05cc19dd6a49f5e7103da7b346b222 100644 (file)
@@ -284,17 +284,25 @@ PARENT and BOL are like other anchor functions."
                    (treesit-node-first-child-for-pos parent bol) t)
                   (treesit-node-child parent -1 t)))
              (continue t))
-    (while (and prev-sibling continue)
-      (pcase (treesit-node-type prev-sibling)
-        ;; Get the statement in the label.
-        ("labeled_statement"
-         (setq prev-sibling (treesit-node-child prev-sibling 2)))
-        ;; Get the last statement in the preproc.  Tested by
-        ;; "Prev-Sibling When Prev-Sibling is Preproc" test.
-        ((or "preproc_if" "preproc_ifdef" "preproc_elif" "preproc_else")
-         (setq prev-sibling (treesit-node-child prev-sibling -2)))
-        ;; Don't do anything special.
-        (_ (setq continue nil))))
+    (save-excursion
+      (while (and prev-sibling continue)
+        (pcase (treesit-node-type prev-sibling)
+          ;; Get the statement in the label.
+          ("labeled_statement"
+           (setq prev-sibling (treesit-node-child prev-sibling 2)))
+          ;; Get the last statement in the preproc.  Tested by
+          ;; "Prev-Sibling When Prev-Sibling is Preproc" test.
+          ((or "preproc_if" "preproc_ifdef" "preproc_elif" "preproc_else")
+           (setq prev-sibling (treesit-node-child prev-sibling -2)))
+          ;; If the start of the previous sibling isn't at the
+          ;; beginning of a line, something's probably not quite
+          ;; right, go a step further.
+          (_ (goto-char (treesit-node-start prev-sibling))
+             (if (looking-back (rx bol (* whitespace))
+                               (line-beginning-position))
+                 (setq continue nil)
+               (setq prev-sibling
+                     (treesit-node-prev-sibling prev-sibling)))))))
     ;; This could be nil if a) there is no prev-sibling or b)
     ;; prev-sibling doesn't have a child.
     (treesit-node-start prev-sibling)))
index 904c6498cb5d449c443bae56876388f2359ce4b6..77bfeb5ad6ee1d98ba1a8b0a31046ebc4d310bf6 100644 (file)
@@ -402,3 +402,19 @@ int main()
   |
 }
 =-=-=
+
+Name: Prev-Sibling But Not Trailing Comment
+
+=-=
+static int
+required_matrix_height (struct window *w)
+{
+#ifdef HAVE_WINDOW_SYSTEM
+  if (FRAME_WINDOW_P (f))
+    {
+      return 0;
+    }
+#endif /* Don't align to this comment.  */
+  |
+}
+=-=-=