]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/vet: replace hasMethod with isFormatter
authorDaniel Martí <mvdan@mvdan.cc>
Wed, 31 Jan 2018 20:53:44 +0000 (20:53 +0000)
committerDaniel Martí <mvdan@mvdan.cc>
Tue, 13 Feb 2018 21:19:57 +0000 (21:19 +0000)
The former checks if a type has a method called "Format". The latter
checks if a type satisfies fmt.Formatter.

isFormatter does exactly what we want, so it's both simpler and more
accurate. Remove the only use of hasMethod in its favor.

Change-Id: Idc156a99081c3308f98512b87011a04aa8c6638d
Reviewed-on: https://go-review.googlesource.com/91215
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
src/cmd/vet/print.go
src/cmd/vet/types.go

index 04c59551b2f88d31376c9455bfbb026502c61548..38d6f72419ba19fb0709249faed58ac85e6e8a5c 100644 (file)
@@ -657,8 +657,7 @@ func (f *File) recursiveStringer(e ast.Expr) bool {
 
        // It's unlikely to be a recursive stringer if it has a Format method.
        if typ := f.pkg.types[e].Type; typ != nil {
-               // Not a perfect match; see issue 6259.
-               if f.hasMethod(typ, "Format") {
+               if f.isFormatter(typ) {
                        return false
                }
        }
index 1f30b4b42b8a321bcb852699b09c0fdca377ac45..ea4269a7f907ea51cd1eff67c0b996ebc17ff7bb 100644 (file)
@@ -310,15 +310,4 @@ func (f *File) matchStructArgType(t printfArgType, typ *types.Struct, arg ast.Ex
        return true
 }
 
-// hasMethod reports whether the type contains a method with the given name.
-// It is part of the workaround for Formatters and should be deleted when
-// that workaround is no longer necessary.
-// TODO: This could be better once issue 6259 is fixed.
-func (f *File) hasMethod(typ types.Type, name string) bool {
-       // assume we have an addressable variable of type typ
-       obj, _, _ := types.LookupFieldOrMethod(typ, true, f.pkg.typesPkg, name)
-       _, ok := obj.(*types.Func)
-       return ok
-}
-
 var archSizes = types.SizesFor("gc", build.Default.GOARCH)