@@ -20,6 +20,7 @@ import (
20
20
"golang.org/x/tools/go/analysis/passes/internal/analysisutil"
21
21
"golang.org/x/tools/go/ast/inspector"
22
22
"golang.org/x/tools/go/types/typeutil"
23
+ "golang.org/x/tools/internal/typesinternal"
23
24
)
24
25
25
26
//go:embed doc.go
@@ -150,14 +151,10 @@ func isAttr(t types.Type) bool {
150
151
func shortName (fn * types.Func ) string {
151
152
var r string
152
153
if recv := fn .Type ().(* types.Signature ).Recv (); recv != nil {
153
- t := recv .Type ()
154
- if pt , ok := t .(* types.Pointer ); ok {
155
- t = pt .Elem ()
156
- }
157
- if nt , ok := t .(* types.Named ); ok {
158
- r = nt .Obj ().Name ()
154
+ if _ , named := typesinternal .ReceiverNamed (recv ); named != nil {
155
+ r = named .Obj ().Name ()
159
156
} else {
160
- r = recv .Type ().String ()
157
+ r = recv .Type ().String () // anon struct/interface
161
158
}
162
159
r += "."
163
160
}
@@ -173,17 +170,12 @@ func kvFuncSkipArgs(fn *types.Func) (int, bool) {
173
170
return 0 , false
174
171
}
175
172
var recvName string // by default a slog package function
176
- recv := fn .Type ().(* types.Signature ).Recv ()
177
- if recv != nil {
178
- t := recv .Type ()
179
- if pt , ok := t .(* types.Pointer ); ok {
180
- t = pt .Elem ()
181
- }
182
- if nt , ok := t .(* types.Named ); ! ok {
183
- return 0 , false
184
- } else {
185
- recvName = nt .Obj ().Name ()
173
+ if recv := fn .Type ().(* types.Signature ).Recv (); recv != nil {
174
+ _ , named := typesinternal .ReceiverNamed (recv )
175
+ if named == nil {
176
+ return 0 , false // anon struct/interface
186
177
}
178
+ recvName = named .Obj ().Name ()
187
179
}
188
180
skip , ok := kvFuncs [recvName ][fn .Name ()]
189
181
return skip , ok
0 commit comments