From 6388f3c5ae5cc85e8c36001452e73f22d6b1e8c2 Mon Sep 17 00:00:00 2001 From: Yuan Fu Date: Sun, 12 Jan 2025 23:03:41 -0800 Subject: [PATCH] Add special indent rule for FOR_EACH_TAIL in c-ts-mode * lisp/progmodes/c-ts-mode.el: (c-ts-mode--emacs-macro-rules): New function (c-ts-mode--simple-indent-rules): Add new rule. (cherry picked from commit 8cfa3447b71a3586378e90e5690da6c1faaa77b6) --- lisp/progmodes/c-ts-mode.el | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index 99e624412b2..d0ed110abbb 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -445,6 +445,18 @@ NODE and PARENT are the same as other indent rules." (cons (funcall parent-bol) c-ts-mode-indent-offset)))))) +(defun c-ts-mode--emacs-macro-rules (_ parent &rest _) + "Rules for indenting macros in Emacs C source. + +PARENT is the same as other simple-indent rules." + (cond + ((and (treesit-node-match-p parent "function_definition") + (equal (treesit-node-text + (treesit-node-child-by-field-name parent "type")) + "FOR_EACH_TAIL")) + (cons (treesit-node-start parent) + c-ts-mode-indent-offset)))) + (defun c-ts-mode--simple-indent-rules (mode style) "Return the indent rules for MODE and STYLE. @@ -466,6 +478,7 @@ MODE can be `c' or `cpp'. STYLE can be `gnu', `k&r', `linux', `bsd'." c-ts-mode--label-indent-rules ,@c-ts-mode--preproc-indent-rules c-ts-mode--macro-heuristic-rules + c-ts-mode--emacs-macro-rules ;; Make sure type and function definition components align and ;; don't indent. Also takes care of GNU style opening braces. -- 2.39.5