| /* |
| Parenthesized type switch expressions originally |
| accepted by gofmt must continue to be rewritten |
| into the correct unparenthesized form. |
| |
| Only type-switches that didn't declare a variable |
| in the type switch type assertion and which |
| contained only "expression-like" (named) types in their |
| cases were permitted to have their type assertion parenthesized |
| by go/parser (due to a weak predicate in the parser). All others |
| were rejected always, either with a syntax error in the |
| type switch header or in the case. |
| |
| See also issue 4470. |
| */ |
| package p |
| |
| func f() { |
| var x interface{} |
| switch x.(type) { // should remain the same |
| } |
| switch (x.(type)) { // should become: switch x.(type) { |
| } |
| |
| switch x.(type) { // should remain the same |
| case int: |
| } |
| switch (x.(type)) { // should become: switch x.(type) { |
| case int: |
| } |
| |
| switch x.(type) { // should remain the same |
| case []int: |
| } |
| |
| // Parenthesized (x.(type)) in type switches containing cases |
| // with unnamed (literal) types were never permitted by gofmt; |
| // thus there won't be any code in the wild using this style if |
| // the code was gofmt-ed. |
| /* |
| switch (x.(type)) { |
| case []int: |
| } |
| */ |
| |
| switch t := x.(type) { // should remain the same |
| default: |
| _ = t |
| } |
| |
| // Parenthesized (x.(type)) in type switches declaring a variable |
| // were never permitted by gofmt; thus there won't be any code in |
| // the wild using this style if the code was gofmt-ed. |
| /* |
| switch t := (x.(type)) { |
| default: |
| _ = t |
| } |
| */ |
| } |