]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/vet: ignore unrecognized flags for fmt.Formatter
authorChris Hines <chris.cs.guy@gmail.com>
Sun, 12 Nov 2017 05:31:52 +0000 (00:31 -0500)
committerBrad Fitzpatrick <bradfitz@golang.org>
Mon, 13 Nov 2017 16:53:53 +0000 (16:53 +0000)
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>

src/cmd/vet/print.go
src/cmd/vet/testdata/print.go

index 5dc6bdf628ab18348fc33145a9a797cbcc0cf80d..e10c3169b389b2d77fd208e2a8e57d299b5e8aff 100644 (file)
@@ -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.
index b7bc98ab560270741b6fbff610a55037700b767e..db11e125ae758d2fac695fb9b7ea2a259bb03ed8 100644 (file)
@@ -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"