From c0b248c234e0a5e26d7dff77adf9a9f2a92a7a9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Wed, 31 Jan 2018 20:53:44 +0000 Subject: [PATCH] cmd/vet: replace hasMethod with isFormatter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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í TryBot-Result: Gobot Gobot Reviewed-by: Robert Griesemer Reviewed-by: Rob Pike --- src/cmd/vet/print.go | 3 +-- src/cmd/vet/types.go | 11 ----------- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/cmd/vet/print.go b/src/cmd/vet/print.go index 04c59551b2f..38d6f72419b 100644 --- a/src/cmd/vet/print.go +++ b/src/cmd/vet/print.go @@ -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 } } diff --git a/src/cmd/vet/types.go b/src/cmd/vet/types.go index 1f30b4b42b8..ea4269a7f90 100644 --- a/src/cmd/vet/types.go +++ b/src/cmd/vet/types.go @@ -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)