]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/vet: don't treat trailing % as possible formatting directive
authorJosh Bleecher Snyder <josharian@gmail.com>
Fri, 8 Jul 2016 00:40:37 +0000 (17:40 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Sun, 21 Aug 2016 22:45:38 +0000 (22:45 +0000)
Eliminates the following false positive:

cmd/go/go_test.go:1916: possible formatting directive in Error call

The line in question:

tg.t.Error("some coverage results are 0.0%")

Updates #11041

Change-Id: I3b7611fa3e0245714a19bd5388f21e39944f5296
Reviewed-on: https://go-review.googlesource.com/27128
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
src/cmd/vet/print.go
src/cmd/vet/testdata/print.go

index f4b985cfbdc4611b5d2c2206b439c42fd560348f..e46897115a62945e54106750f63e8aa99667420d 100644 (file)
@@ -626,7 +626,10 @@ func (f *File) checkPrint(call *ast.CallExpr, name string) {
        }
        arg := args[0]
        if lit, ok := arg.(*ast.BasicLit); ok && lit.Kind == token.STRING {
-               if strings.Contains(lit.Value, "%") {
+               // Ignore trailing % character in lit.Value.
+               // The % in "abc 0.0%" couldn't be a formatting directive.
+               s := strings.TrimSuffix(lit.Value, `%"`)
+               if strings.Contains(s, "%") {
                        f.Badf(call.Pos(), "possible formatting directive in %s call", name)
                }
        }
index 6805b0ec604742688d04453e1883f581cf7ef410..bda6b77aabef572ff5b79a1914b052a14c5e23ea 100644 (file)
@@ -133,6 +133,7 @@ func PrintfTests() {
        fmt.Printf("%.*s %d %g", 3, "hi", 23, 'x') // ERROR "arg 'x' for printf verb %g of wrong type"
        fmt.Println()                              // not an error
        fmt.Println("%s", "hi")                    // ERROR "possible formatting directive in Println call"
+       fmt.Println("0.0%")                        // correct (trailing % couldn't be a formatting directive)
        fmt.Printf("%s", "hi", 3)                  // ERROR "wrong number of args for format in Printf call"
        _ = fmt.Sprintf("%"+("s"), "hi", 3)        // ERROR "wrong number of args for format in Sprintf call"
        fmt.Printf("%s%%%d", "hi", 3)              // correct