From f1f571e72ae10285762d3a941e56f7c4048272af Mon Sep 17 00:00:00 2001 From: Theodor Thornhill Date: Wed, 15 Feb 2023 21:05:37 +0100 Subject: [PATCH] Add electric indent for preproc directives It looks like there are few if no other cases where we get this particular error in the AST than with insertion of '#'. Consider: ``` int main() { | } ``` If we only add '#' the AST yields (ERROR (ERROR)), which we can exploit to hook onto electric indent. The end result should be the hashtag anchored to column 0. * lisp/progmodes/c-ts-mode.el (c-ts-mode--indent-styles): New rule. (c-ts-base-mode): Add # to electric-indent-chars. --- lisp/progmodes/c-ts-mode.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index 020f2642ac2..a60c464093e 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -219,6 +219,7 @@ delimiters < and >'s." MODE is either `c' or `cpp'." (let ((common `(((parent-is "translation_unit") point-min 0) + ((query "(ERROR (ERROR)) @indent") point-min 0) ((node-is ")") parent 1) ((node-is "]") parent-bol 0) ((node-is "else") parent-bol 0) @@ -785,7 +786,7 @@ the semicolon. This function skips the semicolon." ;; Electric (setq-local electric-indent-chars - (append "{}():;," electric-indent-chars)) + (append "{}():;,#" electric-indent-chars)) ;; Imenu. (setq-local treesit-simple-imenu-settings -- 2.39.2