mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-14 09:20:04 -04:00
indents(c): update if cases
This commit is contained in:
parent
2f5deed456
commit
f669924df2
2 changed files with 63 additions and 53 deletions
|
|
@ -9,59 +9,6 @@
|
||||||
(expression_statement)
|
(expression_statement)
|
||||||
] @indent
|
] @indent
|
||||||
|
|
||||||
(
|
|
||||||
if_statement
|
|
||||||
condition: (_) @indent
|
|
||||||
)
|
|
||||||
(
|
|
||||||
(if_statement
|
|
||||||
consequence: (_ ";" @indent_end) @_consequence
|
|
||||||
) @indent
|
|
||||||
(#not-has-type? @_consequence compound_statement)
|
|
||||||
)
|
|
||||||
|
|
||||||
;; if-else case,
|
|
||||||
;; with else that is not if/compound statement
|
|
||||||
(
|
|
||||||
(if_statement
|
|
||||||
consequence: (_ ";" @indent_end) @_consequence
|
|
||||||
"else" @branch
|
|
||||||
alternative: (_) @_alternative
|
|
||||||
)@indent
|
|
||||||
(#not-has-type? @_consequence compound_statement)
|
|
||||||
(#not-has-type? @_alternative compound_statement)
|
|
||||||
)
|
|
||||||
|
|
||||||
;; if-elseif-else case
|
|
||||||
(
|
|
||||||
if_statement
|
|
||||||
consequence: (_) @_consequence
|
|
||||||
alternative:
|
|
||||||
(if_statement "else" @branch)
|
|
||||||
(#not-has-type? @_consequence compound_statement)
|
|
||||||
)
|
|
||||||
|
|
||||||
;; if- else case
|
|
||||||
;; The alternative should be one of the cases below
|
|
||||||
;; because the alternative is a nested tree inside the original if
|
|
||||||
;; dedent to offset the indent it should have gotten
|
|
||||||
;; Does not support multi chained bare ifs
|
|
||||||
(
|
|
||||||
(if_statement
|
|
||||||
consequence: (_ ";" @indent_end) @_consequence
|
|
||||||
"else" @branch
|
|
||||||
alternative:
|
|
||||||
[
|
|
||||||
(compound_statement) @dedent
|
|
||||||
(if_statement
|
|
||||||
consequence: (_) @_consequence (#not-has-type? @_consequence compound_statement)
|
|
||||||
) @dedent
|
|
||||||
(if_statement consequence: (compound_statement) @dedent)
|
|
||||||
]
|
|
||||||
)@indent
|
|
||||||
(#not-has-type? @_consequence compound_statement)
|
|
||||||
)
|
|
||||||
|
|
||||||
(
|
(
|
||||||
ERROR
|
ERROR
|
||||||
"for" "(" @indent ";" ";" ")" @indent_end)
|
"for" "(" @indent ";" ";" ")" @indent_end)
|
||||||
|
|
@ -83,6 +30,64 @@
|
||||||
(#not-has-type? @_body compound_statement)
|
(#not-has-type? @_body compound_statement)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
(
|
||||||
|
(if_statement)
|
||||||
|
(ERROR "else") @indent
|
||||||
|
)
|
||||||
|
|
||||||
|
(
|
||||||
|
if_statement
|
||||||
|
condition: (_) @indent
|
||||||
|
)
|
||||||
|
;; Make sure all cases of if-else are tagged with @indent
|
||||||
|
;; So we will offset the indents for the else case
|
||||||
|
(
|
||||||
|
(if_statement
|
||||||
|
consequence: (compound_statement)
|
||||||
|
"else" @branch
|
||||||
|
alternative:
|
||||||
|
[
|
||||||
|
[ "{" "}" ] @branch
|
||||||
|
(compound_statement ["{" "}"] @branch)
|
||||||
|
(_)
|
||||||
|
]
|
||||||
|
) @indent
|
||||||
|
)
|
||||||
|
(
|
||||||
|
(if_statement
|
||||||
|
consequence: (_ ";" @indent_end) @_consequence
|
||||||
|
) @indent
|
||||||
|
(#not-has-type? @_consequence compound_statement)
|
||||||
|
)
|
||||||
|
(
|
||||||
|
(if_statement
|
||||||
|
consequence: (_) @_consequence
|
||||||
|
"else" @branch
|
||||||
|
alternative:
|
||||||
|
[
|
||||||
|
[ "{" "}" ] @branch
|
||||||
|
(compound_statement ["{" "}"] @branch)
|
||||||
|
(_)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
(#not-has-type? @_consequence compound_statement)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; Dedent for chaining if-else statements
|
||||||
|
;; this will go recursively through each if-elseif
|
||||||
|
;; if-elseif -> second `if` is dedented once, indented twice
|
||||||
|
;; if-elseif-elseif -> third `if` is dedented twice, indented 3 times
|
||||||
|
;; -> all are indented once
|
||||||
|
(
|
||||||
|
(if_statement
|
||||||
|
consequence: (_)
|
||||||
|
alternative:
|
||||||
|
[
|
||||||
|
(if_statement consequence: (compound_statement) @dedent)
|
||||||
|
(_)
|
||||||
|
] @dedent
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
(compound_statement "}" @indent_end)
|
(compound_statement "}" @indent_end)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ describe("indent C:", function()
|
||||||
runner:new_line("issue-4079.c", { on_line = 2, text = "return;", indent = 8 })
|
runner:new_line("issue-4079.c", { on_line = 2, text = "return;", indent = 8 })
|
||||||
runner:new_line("issue-4079.c", { on_line = 2, text = "{", indent = 4 })
|
runner:new_line("issue-4079.c", { on_line = 2, text = "{", indent = 4 })
|
||||||
runner:new_line("issue-4079.c", { on_line = 6, text = "{", indent = 4 })
|
runner:new_line("issue-4079.c", { on_line = 6, text = "{", indent = 4 })
|
||||||
|
runner:new_line("issue-4117.c", { on_line = 3, text = "else", indent = 4 })
|
||||||
-- the line after inserted one will be left with wrong indent but we only care about the inserted one
|
-- the line after inserted one will be left with wrong indent but we only care about the inserted one
|
||||||
for _, line in ipairs { 2, 4, 7, 10 } do
|
for _, line in ipairs { 2, 4, 7, 10 } do
|
||||||
runner:new_line("no_braces.c", { on_line = line, text = "x++;", indent = 8 })
|
runner:new_line("no_braces.c", { on_line = line, text = "x++;", indent = 8 })
|
||||||
|
|
@ -68,5 +69,9 @@ describe("indent C:", function()
|
||||||
} do
|
} do
|
||||||
runner:new_line("if_else.c", { on_line = info[1], text = "x++;", indent = info[2] })
|
runner:new_line("if_else.c", { on_line = info[1], text = "x++;", indent = info[2] })
|
||||||
end
|
end
|
||||||
|
-- dedent braces on new line
|
||||||
|
for _, line in ipairs { 10, 12, 14 } do
|
||||||
|
runner:new_line("if_else.c", { on_line = line, text = "{}", indent = 4 })
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue