aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChris Hines <chris.cs.guy@gmail.com>2017-11-12 00:31:52 -0500
committerBrad Fitzpatrick <bradfitz@golang.org>2017-11-13 16:53:53 +0000
commit510327012bd42aca3deac989e2e109dc71bb4605 (patch)
tree4e4da978ea090c8cb8325721045826e4ed50a14c /src
parentfafce97ec68a3b5d96edbef5c64b52b94c68a63e (diff)
downloadgo-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.go16
-rw-r--r--src/cmd/vet/testdata/print.go11
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"