/*
	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 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
	}
	*/
}
