(apply (alist-get 'standalone-parent treesit-simple-indent-presets)
parent (treesit-node-parent parent) bol args))
+(defun c-ts-mode--prev-line-match (regexp)
+ "An indentation matcher that matches if prev line matches REGEXP."
+ (lambda (_n _p bol &rest _)
+ (save-excursion
+ (goto-char bol)
+ (forward-line -1)
+ (back-to-indentation)
+ (looking-at-p regexp))))
+
(defun c-ts-mode--indent-styles (mode)
"Indent rules supported by `c-ts-mode'.
MODE is either `c' or `cpp'."
(let ((common
`((c-ts-mode--for-each-tail-body-matcher prev-line c-ts-mode-indent-offset)
+ ;; If the user types "if (...)" and hit return, they expect
+ ;; the point on the empty line to be indented, this rule
+ ;; does that.
+ ((and no-node
+ (c-ts-mode--prev-line-match
+ ,(rx (or "if" "else" "while" "do" "for"))))
+ prev-line c-ts-mode-indent-offset)
((parent-is "translation_unit") column-0 0)
((query "(ERROR (ERROR)) @indent") column-0 0)