diff options
| author | Daniel Martí <mvdan@mvdan.cc> | 2017-11-07 11:34:35 +0000 |
|---|---|---|
| committer | Daniel Martí <mvdan@mvdan.cc> | 2017-11-10 09:08:06 +0000 |
| commit | 366681cc06357cfdca91c18eff059e11e5470383 (patch) | |
| tree | 878b7a7405059fd129740fba1d56c465a459416e /src/cmd | |
| parent | 2a668e2467ddea57e8a1ab2859cfd49e6ab2dd40 (diff) | |
| download | go-366681cc06357cfdca91c18eff059e11e5470383.tar.xz | |
cmd/vet: don't warn on escaped newlines in Println
The old code only worked for double-quoted strings, and only checked
that the end of the literal value was \n". This worked most of the time,
except for some strings like "foo\\n", which doesn't actually translate
into a trailing newline when unquoted.
To fix this, unquote the string first and look for a real newline at the
end of it. Ignore errors, as we don't have anything to do with string
literals using back quotes.
Fixes #22613.
Change-Id: I7cf96916dd578b7068216c2051ec2622cce0b740
Reviewed-on: https://go-review.googlesource.com/76194
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/cmd')
| -rw-r--r-- | src/cmd/vet/print.go | 5 | ||||
| -rw-r--r-- | src/cmd/vet/testdata/print.go | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/cmd/vet/print.go b/src/cmd/vet/print.go index 620075d118..5dc6bdf628 100644 --- a/src/cmd/vet/print.go +++ b/src/cmd/vet/print.go @@ -672,8 +672,9 @@ func (f *File) checkPrint(call *ast.CallExpr, name string) { // The last item, if a string, should not have a newline. arg = args[len(args)-1] if lit, ok := arg.(*ast.BasicLit); ok && lit.Kind == token.STRING { - if strings.HasSuffix(lit.Value, `\n"`) { - f.Badf(call.Pos(), "%s args end with redundant newline", name) + str, _ := strconv.Unquote(lit.Value) + if strings.HasSuffix(str, "\n") { + f.Badf(call.Pos(), "%s arg list ends with redundant newline", name) } } } diff --git a/src/cmd/vet/testdata/print.go b/src/cmd/vet/testdata/print.go index c3f5abe4f1..b7bc98ab56 100644 --- a/src/cmd/vet/testdata/print.go +++ b/src/cmd/vet/testdata/print.go @@ -532,4 +532,9 @@ func UnexportedStringerOrError() { } fmt.Printf("%s", uef) // ERROR "Printf format %s has arg uef of wrong type testdata.unexportedErrorOtherFields" fmt.Printf("%s", &uef) // ERROR "Printf format %s has arg &uef of wrong type [*]testdata.unexportedErrorOtherFields" + + fmt.Println("foo\n", "bar") // not an error + fmt.Println("foo\n") // ERROR "Println arg list ends with redundant newline" + fmt.Println("foo\\n") // not an error + fmt.Println(`foo\n`) // not an error } |
