fix(c_indents): fix expression leaking indents

This commit is contained in:
Pham Huy Hoang 2023-03-20 15:58:06 +09:00 committed by Stephan Seitz
parent 474c59dcf1
commit 9161093fc7
3 changed files with 46 additions and 1 deletions

View file

@ -6,9 +6,15 @@
(compound_literal_expression)
(initializer_list)
(init_declarator)
(expression_statement)
] @indent.begin
; With current indent logic, if we capture expression_statement with @indent.begin
; It will be affected by _parent_ node with error subnodes deep down the tree
; So narrow indent capture to check for error inside expression statement only,
(expression_statement
(_) @indent.begin
";" @indent.end)
(
ERROR
"for" "(" @indent.begin ";" ";" ")" @indent.end)

View file

@ -0,0 +1,23 @@
#include <stdint.h>
#include <inttypes.h>
#include <stdio.h>
char *a = "a" "b" "c" D;
static int a, b, c;
a = b = c = 0;
static int d = 0, e = 0, f = 0;
int main(void) {
printf("String" PRIu64 "\n", (uint64_t)0);
printf("String" AND_ERROR_NODE "and string");
fflush(stdout);
a = 0; b = 0; c = 0;
int x = 0; int y = 0; int z = 0;
foo(1, 2);
x++;
a = b
= c
= d;
}

View file

@ -73,5 +73,21 @@ describe("indent C:", function()
for _, line in ipairs { 10, 12, 14 } do
runner:new_line("if_else.c", { on_line = line, text = "{}", indent = 4 })
end
for _, info in ipairs {
{ 8, 0 },
{ 10, 0 },
{ 13, 4 },
{ 14, 4 },
{ 15, 4 },
{ 16, 4 },
{ 17, 4 },
{ 18, 4 },
{ 20, 8 },
{ 21, 8 },
{ 22, 4 },
} do
runner:new_line("issue-4525.c", { on_line = info[1], text = "x++;", indent = info[2] })
end
end)
end)