diff options
author | Daniel Martà | 2023-04-25 23:05:23 +0000 |
---|---|---|
committer | GitHub | 2023-04-25 23:05:23 +0000 |
commit | e7f25d88ca059ba006525bd7d476da9ada5341b6 (patch) | |
tree | a83cfc8fd53c76198656da5e0882c7e6ad07fd7d | |
parent | 096ed0ced449ff0355fed6220c762c4f7f28ec25 (diff) |
Avoid extra indentation on Go switches (#6817)
Unlike other languages, in Go, switches themselves are not indented;
it's just each case body which is indented by one level:
switch foo {
case "bar":
baz()
}
As such, we shouldn't `@indent` for type_switch_statement nor
expression_switch_statement, as otherwise inserted lines show up as:
switch foo {
// inserted with "o"
case "bar":
// inserted with "o"
baz()
}
With the fix, the inserted lines are indented properly:
switch foo {
// inserted with "o"
case "bar":
// inserted with "o"
baz()
}
I also verified that indentation on selects similarly works well.
Thanks to Triton171 for helping with this fix.
-rw-r--r-- | runtime/queries/go/indents.scm | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/runtime/queries/go/indents.scm b/runtime/queries/go/indents.scm index e439a905..b2befab0 100644 --- a/runtime/queries/go/indents.scm +++ b/runtime/queries/go/indents.scm @@ -14,8 +14,6 @@ (argument_list) (field_declaration_list) (block) - (type_switch_statement) - (expression_switch_statement) (var_declaration) ] @indent @@ -24,5 +22,19 @@ ")" ] @outdent -((_ "}" @outdent) @outer (#not-kind-eq? @outer "select_statement")) -(communication_case) @extend +; Switches and selects aren't indented, only their case bodies are. +; Outdent all closing braces except those closing switches or selects. +( + (_ "}" @outdent) @outer + (#not-kind-eq? @outer "select_statement") + (#not-kind-eq? @outer "type_switch_statement") + (#not-kind-eq? @outer "expression_switch_statement") +) + +; Starting a line after a new case should indent. +[ + (communication_case) + (expression_case) + (default_case) + (type_case) +] @extend |