summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Martí2023-04-25 23:05:23 +0000
committerGitHub2023-04-25 23:05:23 +0000
commite7f25d88ca059ba006525bd7d476da9ada5341b6 (patch)
treea83cfc8fd53c76198656da5e0882c7e6ad07fd7d
parent096ed0ced449ff0355fed6220c762c4f7f28ec25 (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.scm20
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