mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-01 19:17:02 -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)
|
||||
] @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
|
||||
"for" "(" @indent ";" ";" ")" @indent_end)
|
||||
|
|
@ -83,6 +30,64 @@
|
|||
(#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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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 = "{", 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
|
||||
for _, line in ipairs { 2, 4, 7, 10 } do
|
||||
runner:new_line("no_braces.c", { on_line = line, text = "x++;", indent = 8 })
|
||||
|
|
@ -68,5 +69,9 @@ describe("indent C:", function()
|
|||
} do
|
||||
runner:new_line("if_else.c", { on_line = info[1], text = "x++;", indent = info[2] })
|
||||
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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue