mirror of https://github.com/golang/go.git
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>
This commit is contained in:
parent
2a668e2467
commit
366681cc06
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue