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.
This commit is contained in:
Yuan Fu 2025-01-12 23:03:41 -08:00
parent 04032cd00a
commit 8cfa3447b7
No known key found for this signature in database
GPG key ID: 56E19BC57664A442

View file

@ -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.