]> git.eshelyaron.com Git - emacs.git/commitdiff
Add electric indent for preproc directives
authorTheodor Thornhill <theo@thornhill.no>
Wed, 15 Feb 2023 20:05:37 +0000 (21:05 +0100)
committerTheodor Thornhill <theo@thornhill.no>
Thu, 16 Feb 2023 18:52:06 +0000 (19:52 +0100)
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

index 020f2642ac2fd872d59c281b1b2b7abe54712e75..a60c464093e1111ed1eec4fead52a4756f0daec3 100644 (file)
@@ -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