diff options
| author | Chris Hines <chris.cs.guy@gmail.com> | 2017-11-12 00:31:52 -0500 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2017-11-13 16:53:53 +0000 |
| commit | 510327012bd42aca3deac989e2e109dc71bb4605 (patch) | |
| tree | 4e4da978ea090c8cb8325721045826e4ed50a14c /src | |
| parent | fafce97ec68a3b5d96edbef5c64b52b94c68a63e (diff) | |
| download | go-510327012bd42aca3deac989e2e109dc71bb4605.tar.xz | |
cmd/vet: ignore unrecognized flags for fmt.Formatter
Fixes #22608.
Change-Id: Id85eb86b0b262156646e55f102fe888b345b20cf
Reviewed-on: https://go-review.googlesource.com/77230
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmd/vet/print.go | 16 | ||||
| -rw-r--r-- | src/cmd/vet/testdata/print.go | 11 |
2 files changed, 15 insertions, 12 deletions
diff --git a/src/cmd/vet/print.go b/src/cmd/vet/print.go index 5dc6bdf628..e10c3169b3 100644 --- a/src/cmd/vet/print.go +++ b/src/cmd/vet/print.go @@ -483,15 +483,17 @@ func (f *File) okPrintfArg(call *ast.CallExpr, state *formatState) (ok bool) { } } - if !found && !formatter { - f.Badf(call.Pos(), "%s format %s has unknown verb %c", state.name, state.format, state.verb) - return false - } - for _, flag := range state.flags { - if !strings.ContainsRune(v.flags, rune(flag)) { - f.Badf(call.Pos(), "%s format %s has unrecognized flag %c", state.name, state.format, flag) + if !formatter { + if !found { + f.Badf(call.Pos(), "%s format %s has unknown verb %c", state.name, state.format, state.verb) return false } + for _, flag := range state.flags { + if !strings.ContainsRune(v.flags, rune(flag)) { + f.Badf(call.Pos(), "%s format %s has unrecognized flag %c", state.name, state.format, flag) + return false + } + } } // Verb is good. If len(state.argNums)>trueArgs, we have something like %.*s and all // but the final arg must be an integer. diff --git a/src/cmd/vet/testdata/print.go b/src/cmd/vet/testdata/print.go index b7bc98ab56..db11e125ae 100644 --- a/src/cmd/vet/testdata/print.go +++ b/src/cmd/vet/testdata/print.go @@ -163,11 +163,12 @@ func PrintfTests() { Printf(format, "hi") // ERROR "Printf format %s reads arg #2, but call has only 1 arg$" Printf("%s %d %.3v %q", "str", 4) // ERROR "Printf format %.3v reads arg #3, but call has only 2 args" f := new(stringer) - f.Warn(0, "%s", "hello", 3) // ERROR "Warn call has possible formatting directive %s" - f.Warnf(0, "%s", "hello", 3) // ERROR "Warnf call needs 1 arg but has 2 args" - f.Warnf(0, "%r", "hello") // ERROR "Warnf format %r has unknown verb r" - f.Warnf(0, "%#s", "hello") // ERROR "Warnf format %#s has unrecognized flag #" - Printf("d%", 2) // ERROR "Printf format % is missing verb at end of string" + f.Warn(0, "%s", "hello", 3) // ERROR "Warn call has possible formatting directive %s" + f.Warnf(0, "%s", "hello", 3) // ERROR "Warnf call needs 1 arg but has 2 args" + f.Warnf(0, "%r", "hello") // ERROR "Warnf format %r has unknown verb r" + f.Warnf(0, "%#s", "hello") // ERROR "Warnf format %#s has unrecognized flag #" + fmt.Printf("%#s", FormatterVal(true)) // correct (the type is responsible for formatting) + Printf("d%", 2) // ERROR "Printf format % is missing verb at end of string" Printf("%d", percentDV) Printf("%d", &percentDV) Printf("%d", notPercentDV) // ERROR "Printf format %d has arg notPercentDV of wrong type testdata.notPercentDStruct" |
