return par
}
- // recv type must be of the form ["*"] identifier
+ // recv type must be of the form ["*"] identifier, possibly using parentheses
recv := par.List[0]
- base := deref(recv.Type)
+ base := unparen(deref(unparen(recv.Type)))
if _, isIdent := base.(*ast.Ident); !isIdent {
if _, isBad := base.(*ast.BadExpr); !isBad {
// only report error if it's a new one
`package p; func f() { for _ = range "foo" + "bar" {} };`,
`package p; func f() { var s []int; g(s[:], s[i:], s[:j], s[i:j], s[i:j:k], s[:j:k]) };`,
`package p; var ( _ = (struct {*T}).m; _ = (interface {T}).m )`,
+ `package p; func ((T),) m() {}`,
+ `package p; func ((*T),) m() {}`,
+ `package p; func (*(T),) m() {}`,
}
func TestValid(t *testing.T) {