]> Cypherpunks repositories - gostls13.git/commitdiff
fmt: make all errors begin with the string "%!", always.
authorRobert Daniel Kortschak <dan.kortschak@adelaide.edu.au>
Wed, 31 Jul 2013 06:11:12 +0000 (16:11 +1000)
committerRob Pike <r@golang.org>
Wed, 31 Jul 2013 06:11:12 +0000 (16:11 +1000)
Fixes #5730.

R=dsymonds, r, kamil.kisiel
CC=golang-dev
https://golang.org/cl/11998044

src/pkg/fmt/doc.go
src/pkg/fmt/fmt_test.go
src/pkg/fmt/print.go

index e1fca445e307a85edb582c02d0b4b1365a9d9bfd..095fd03b23ddd4042d09852dd906790f3accbb99 100644 (file)
                        Printf("%*s", 4.5, "hi"):  %!(BADWIDTH)hi
                        Printf("%.*s", 4.5, "hi"): %!(BADPREC)hi
                Invalid or invalid use of argument index: %!(BADINDEX)
-                       Printf("%*[2]d", 7):       %d!(BADINDEX)
-                       Printf("%.[2]d", 7):       %d!(BADINDEX)
+                       Printf("%*[2]d", 7):       %!d(BADINDEX)
+                       Printf("%.[2]d", 7):       %!d(BADINDEX)
 
        All errors begin with the string "%!" followed sometimes
        by a single character (the verb) and end with a parenthesized
        through the fmt package.  For example, if a String method
        calls panic("bad"), the resulting formatted message will look
        like
-               %s(PANIC=bad)
+               %!s(PANIC=bad)
 
-       The %s just shows the print verb in use when the failure
+       The %!s just shows the print verb in use when the failure
        occurred.
 
        Scanning
index d3df109cde1be76850fb48a5eb030532862a7a56..fb326ed8e28164fab272aae6eb4dd5acf80800fd 100644 (file)
@@ -563,17 +563,17 @@ var reorderTests = []struct {
        {"%d %d %d %#[1]o %#o %#o", SE{11, 12, 13}, "11 12 13 013 014 015"},
 
        // Erroneous cases.
-       {"%[d", SE{2, 1}, "%d!(BADINDEX)"},
+       {"%[d", SE{2, 1}, "%!d(BADINDEX)"},
        {"%]d", SE{2, 1}, "%!](int=2)d%!(EXTRA int=1)"},
-       {"%[]d", SE{2, 1}, "%d!(BADINDEX)"},
-       {"%[-3]d", SE{2, 1}, "%d!(BADINDEX)"},
-       {"%[99]d", SE{2, 1}, "%d!(BADINDEX)"},
+       {"%[]d", SE{2, 1}, "%!d(BADINDEX)"},
+       {"%[-3]d", SE{2, 1}, "%!d(BADINDEX)"},
+       {"%[99]d", SE{2, 1}, "%!d(BADINDEX)"},
        {"%[3]", SE{2, 1}, "%!(NOVERB)"},
-       {"%[1].2d", SE{5, 6}, "%d!(BADINDEX)"},
-       {"%[1]2d", SE{2, 1}, "%d!(BADINDEX)"},
-       {"%3.[2]d", SE{7}, "%d!(BADINDEX)"},
-       {"%.[2]d", SE{7}, "%d!(BADINDEX)"},
-       {"%d %d %d %#[1]o %#o %#o %#o", SE{11, 12, 13}, "11 12 13 013 014 015 %o!(MISSING)"},
+       {"%[1].2d", SE{5, 6}, "%!d(BADINDEX)"},
+       {"%[1]2d", SE{2, 1}, "%!d(BADINDEX)"},
+       {"%3.[2]d", SE{7}, "%!d(BADINDEX)"},
+       {"%.[2]d", SE{7}, "%!d(BADINDEX)"},
+       {"%d %d %d %#[1]o %#o %#o %#o", SE{11, 12, 13}, "11 12 13 013 014 015 %!o(MISSING)"},
 }
 
 func TestReorder(t *testing.T) {
@@ -877,16 +877,16 @@ var panictests = []struct {
 }{
        // String
        {"%s", (*Panic)(nil), "<nil>"}, // nil pointer special case
-       {"%s", Panic{io.ErrUnexpectedEOF}, "%s!(PANIC=unexpected EOF)"},
-       {"%s", Panic{3}, "%s!(PANIC=3)"},
+       {"%s", Panic{io.ErrUnexpectedEOF}, "%!s(PANIC=unexpected EOF)"},
+       {"%s", Panic{3}, "%!s(PANIC=3)"},
        // GoString
        {"%#v", (*Panic)(nil), "<nil>"}, // nil pointer special case
-       {"%#v", Panic{io.ErrUnexpectedEOF}, "%v!(PANIC=unexpected EOF)"},
-       {"%#v", Panic{3}, "%v!(PANIC=3)"},
+       {"%#v", Panic{io.ErrUnexpectedEOF}, "%!v(PANIC=unexpected EOF)"},
+       {"%#v", Panic{3}, "%!v(PANIC=3)"},
        // Format
        {"%s", (*PanicF)(nil), "<nil>"}, // nil pointer special case
-       {"%s", PanicF{io.ErrUnexpectedEOF}, "%s!(PANIC=unexpected EOF)"},
-       {"%s", PanicF{3}, "%s!(PANIC=3)"},
+       {"%s", PanicF{io.ErrUnexpectedEOF}, "%!s(PANIC=unexpected EOF)"},
+       {"%s", PanicF{3}, "%!s(PANIC=3)"},
 }
 
 func TestPanics(t *testing.T) {
index bca2d35fb080dc60799aad1e4c1f69bebcdaf904..1b0c207d3b114a8f58e7337b8a6bb67b1a8a7cfa 100644 (file)
@@ -16,20 +16,21 @@ import (
 // Some constants in the form of bytes, to avoid string overhead.
 // Needlessly fastidious, I suppose.
 var (
-       commaSpaceBytes = []byte(", ")
-       nilAngleBytes   = []byte("<nil>")
-       nilParenBytes   = []byte("(nil)")
-       nilBytes        = []byte("nil")
-       mapBytes        = []byte("map[")
-       missingBytes    = []byte("!(MISSING)")
-       badIndexBytes   = []byte("!(BADINDEX)")
-       panicBytes      = []byte("!(PANIC=")
-       extraBytes      = []byte("%!(EXTRA ")
-       irparenBytes    = []byte("i)")
-       bytesBytes      = []byte("[]byte{")
-       badWidthBytes   = []byte("%!(BADWIDTH)")
-       badPrecBytes    = []byte("%!(BADPREC)")
-       noVerbBytes     = []byte("%!(NOVERB)")
+       commaSpaceBytes  = []byte(", ")
+       nilAngleBytes    = []byte("<nil>")
+       nilParenBytes    = []byte("(nil)")
+       nilBytes         = []byte("nil")
+       mapBytes         = []byte("map[")
+       percentBangBytes = []byte("%!")
+       missingBytes     = []byte("(MISSING)")
+       badIndexBytes    = []byte("(BADINDEX)")
+       panicBytes       = []byte("(PANIC=")
+       extraBytes       = []byte("%!(EXTRA ")
+       irparenBytes     = []byte("i)")
+       bytesBytes       = []byte("[]byte{")
+       badWidthBytes    = []byte("%!(BADWIDTH)")
+       badPrecBytes     = []byte("%!(BADPREC)")
+       noVerbBytes      = []byte("%!(NOVERB)")
 )
 
 // State represents the printer state passed to custom formatters.
@@ -660,7 +661,7 @@ func (p *pp) catchPanic(arg interface{}, verb rune) {
                        // Nested panics; the recursion in printArg cannot succeed.
                        panic(err)
                }
-               p.buf.WriteByte('%')
+               p.buf.Write(percentBangBytes)
                p.add(verb)
                p.buf.Write(panicBytes)
                p.panicking = true
@@ -1165,12 +1166,12 @@ func (p *pp) doPrintf(format string, a []interface{}) {
                        continue
                }
                if !p.goodArgNum {
-                       p.buf.WriteByte('%')
+                       p.buf.Write(percentBangBytes)
                        p.add(c)
                        p.buf.Write(badIndexBytes)
                        continue
                } else if argNum >= len(a) { // out of operands
-                       p.buf.WriteByte('%')
+                       p.buf.Write(percentBangBytes)
                        p.add(c)
                        p.buf.Write(missingBytes)
                        continue