[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
How does c-ts-mode, tree-sitter indentation, and preprocessor directives
From: |
Björn Lindqvist |
Subject: |
How does c-ts-mode, tree-sitter indentation, and preprocessor directives work? |
Date: |
Thu, 28 Nov 2024 00:27:17 +0100 |
Hello Emacs developers!
I've been trying to get c-ts-mode to indent like I want, but I'm
running into problems related to preprocessor directives. For
example, consider a type definition nested in two #ifdefs:
#ifdef X
#ifdef Y
typedef int foo;
#endif
#endif
Since both the parent and grand parent of the type_definition is a
preproc_ifdef no rule matches. Another issue is that I want my
preprocessor directives kept at column 0, which unfortunately screws
up all rules that refer to the parent. E.g.:
((parent-is "if_statement") standalone-parent 4)
Doesn't work for
int main() {
if (true)
#ifdef A
prutt();
#else
fis();
#endif
}
The rule I'd like to express is "take the indent of the closest
*indenting* parent and add one indent". That rule would match whether
that parent is a "while_statement", "if_statement", "for_statement",
etc. You can't express such rules with tree-sitter, can you?
Btw, I get that tree-sitter can't handle *all* weird preprocessor
constructs you can create, but my examples are really common and
appear in most C code bases.
--
mvh/best regards Björn Lindqvist
- How does c-ts-mode, tree-sitter indentation, and preprocessor directives work?,
Björn Lindqvist <=