diff options
Diffstat (limited to 'src/pkg/go')
-rw-r--r-- | src/pkg/go/printer/nodes.go | 16 | ||||
-rw-r--r-- | src/pkg/go/printer/testdata/declarations.golden | 70 | ||||
-rw-r--r-- | src/pkg/go/printer/testdata/declarations.input | 12 | ||||
-rw-r--r-- | src/pkg/go/printer/testdata/linebreaks.golden | 186 | ||||
-rw-r--r-- | src/pkg/go/token/token.go | 102 |
5 files changed, 210 insertions, 176 deletions
diff --git a/src/pkg/go/printer/nodes.go b/src/pkg/go/printer/nodes.go index b9b890016..04b961026 100644 --- a/src/pkg/go/printer/nodes.go +++ b/src/pkg/go/printer/nodes.go @@ -159,15 +159,17 @@ func (p *printer) exprList(prev token.Position, list []ast.Expr, depth int, mode ws = indent } + oneLiner := false // true if the previous expression fit on a single line + prevBreak := -1 // index of last expression that was followed by a linebreak + // the first linebreak is always a formfeed since this section must not // depend on any previous formatting if prev.IsValid() && prev.Line < line && p.linebreak(line, 1, 2, ws, true) { ws = ignore *multiLine = true + prevBreak = 0 } - oneLiner := false // true if the previous expression fit on a single line - prevBreak := 0 // index of last expression that was followed by a linebreak for i, x := range list { prev := line line = x.Pos().Line @@ -189,12 +191,20 @@ func (p *printer) exprList(prev token.Position, list []ast.Expr, depth int, mode p.print(blank) } } - p.expr0(x, depth, multiLine) // determine if x satisfies the "one-liner" criteria // TODO(gri): determine if the multiline information returned // from p.expr0 is precise enough so it could be // used instead oneLiner = p.isOneLineExpr(x) + if t, isPair := x.(*ast.KeyValueExpr); isPair && oneLiner && len(list) > 1 { + // we have a key:value expression that fits onto one line, and + // is a list with more then one entry: align all the values + p.expr(t.Key, multiLine) + p.print(t.Colon, token.COLON, vtab) + p.expr(t.Value, multiLine) + } else { + p.expr0(x, depth, multiLine) + } } if mode&commaTerm != 0 && next.IsValid() && p.pos.Line < next.Line { diff --git a/src/pkg/go/printer/testdata/declarations.golden b/src/pkg/go/printer/testdata/declarations.golden index beb110d87..ef93eb965 100644 --- a/src/pkg/go/printer/testdata/declarations.golden +++ b/src/pkg/go/printer/testdata/declarations.golden @@ -463,44 +463,56 @@ func _() { func _() { + var privateKey2 = &Block{Type: "RSA PRIVATE KEY", + Headers: map[string]string{}, + Bytes: []uint8{0x30, 0x82, 0x1, 0x3a, 0x2, 0x1, 0x0, 0x2, + 0x41, 0x0, 0xb2, 0x99, 0xf, 0x49, 0xc4, 0x7d, 0xfa, 0x8c, + 0xd4, 0x0, 0xae, 0x6a, 0x4d, 0x1b, 0x8a, 0x3b, 0x6a, 0x13, + 0x64, 0x2b, 0x23, 0xf2, 0x8b, 0x0, 0x3b, 0xfb, 0x97, 0x79, + }, + } +} + + +func _() { var Universe = Scope{ Names: map[string]*Ident{ // basic types - "bool": nil, - "byte": nil, - "int8": nil, - "int16": nil, - "int32": nil, - "int64": nil, - "uint8": nil, - "uint16": nil, - "uint32": nil, - "uint64": nil, - "float32": nil, - "float64": nil, - "string": nil, + "bool": nil, + "byte": nil, + "int8": nil, + "int16": nil, + "int32": nil, + "int64": nil, + "uint8": nil, + "uint16": nil, + "uint32": nil, + "uint64": nil, + "float32": nil, + "float64": nil, + "string": nil, // convenience types - "int": nil, - "uint": nil, - "uintptr": nil, - "float": nil, + "int": nil, + "uint": nil, + "uintptr": nil, + "float": nil, // constants - "false": nil, - "true": nil, - "iota": nil, - "nil": nil, + "false": nil, + "true": nil, + "iota": nil, + "nil": nil, // functions - "cap": nil, - "len": nil, - "new": nil, - "make": nil, - "panic": nil, - "panicln": nil, - "print": nil, - "println": nil, + "cap": nil, + "len": nil, + "new": nil, + "make": nil, + "panic": nil, + "panicln": nil, + "print": nil, + "println": nil, }, } } diff --git a/src/pkg/go/printer/testdata/declarations.input b/src/pkg/go/printer/testdata/declarations.input index c47be82b4..6c3e1682b 100644 --- a/src/pkg/go/printer/testdata/declarations.input +++ b/src/pkg/go/printer/testdata/declarations.input @@ -460,6 +460,18 @@ func _() { func _() { + var privateKey2 = &Block{Type: "RSA PRIVATE KEY", + Headers: map[string]string{}, + Bytes: []uint8{0x30, 0x82, 0x1, 0x3a, 0x2, 0x1, 0x0, 0x2, + 0x41, 0x0, 0xb2, 0x99, 0xf, 0x49, 0xc4, 0x7d, 0xfa, 0x8c, + 0xd4, 0x0, 0xae, 0x6a, 0x4d, 0x1b, 0x8a, 0x3b, 0x6a, 0x13, + 0x64, 0x2b, 0x23, 0xf2, 0x8b, 0x0, 0x3b, 0xfb, 0x97, 0x79, + }, + } +} + + +func _() { var Universe = Scope { Names: map[string]*Ident { // basic types diff --git a/src/pkg/go/printer/testdata/linebreaks.golden b/src/pkg/go/printer/testdata/linebreaks.golden index 01c673f77..3179156e4 100644 --- a/src/pkg/go/printer/testdata/linebreaks.golden +++ b/src/pkg/go/printer/testdata/linebreaks.golden @@ -26,35 +26,35 @@ type writerTest struct { var writerTests = []*writerTest{ &writerTest{ - file: "testdata/writer.tar", + file: "testdata/writer.tar", entries: []*writerTestEntry{ &writerTestEntry{ header: &Header{ - Name: "small.txt", - Mode: 0640, - Uid: 73025, - Gid: 5000, - Size: 5, - Mtime: 1246508266, - Typeflag: '0', - Uname: "dsymonds", - Gname: "eng", + Name: "small.txt", + Mode: 0640, + Uid: 73025, + Gid: 5000, + Size: 5, + Mtime: 1246508266, + Typeflag: '0', + Uname: "dsymonds", + Gname: "eng", }, - contents: "Kilts", + contents: "Kilts", }, &writerTestEntry{ header: &Header{ - Name: "small2.txt", - Mode: 0640, - Uid: 73025, - Gid: 5000, - Size: 11, - Mtime: 1245217492, - Typeflag: '0', - Uname: "dsymonds", - Gname: "eng", + Name: "small2.txt", + Mode: 0640, + Uid: 73025, + Gid: 5000, + Size: 11, + Mtime: 1245217492, + Typeflag: '0', + Uname: "dsymonds", + Gname: "eng", }, - contents: "Google.com\n", + contents: "Google.com\n", }, }, }, @@ -62,19 +62,19 @@ var writerTests = []*writerTest{ // dd if=/dev/zero bs=1048576 count=16384 > /tmp/16gig.txt // tar -b 1 -c -f- /tmp/16gig.txt | dd bs=512 count=8 > writer-big.tar &writerTest{ - file: "testdata/writer-big.tar", + file: "testdata/writer-big.tar", entries: []*writerTestEntry{ &writerTestEntry{ header: &Header{ - Name: "tmp/16gig.txt", - Mode: 0640, - Uid: 73025, - Gid: 5000, - Size: 16 << 30, - Mtime: 1254699560, - Typeflag: '0', - Uname: "dsymonds", - Gname: "eng", + Name: "tmp/16gig.txt", + Mode: 0640, + Uid: 73025, + Gid: 5000, + Size: 16 << 30, + Mtime: 1254699560, + Typeflag: '0', + Uname: "dsymonds", + Gname: "eng", }, // no contents }, @@ -89,94 +89,94 @@ type untarTest struct { var untarTests = []*untarTest{ &untarTest{ - file: "testdata/gnu.tar", + file: "testdata/gnu.tar", headers: []*Header{ &Header{ - Name: "small.txt", - Mode: 0640, - Uid: 73025, - Gid: 5000, - Size: 5, - Mtime: 1244428340, - Typeflag: '0', - Uname: "dsymonds", - Gname: "eng", + Name: "small.txt", + Mode: 0640, + Uid: 73025, + Gid: 5000, + Size: 5, + Mtime: 1244428340, + Typeflag: '0', + Uname: "dsymonds", + Gname: "eng", }, &Header{ - Name: "small2.txt", - Mode: 0640, - Uid: 73025, - Gid: 5000, - Size: 11, - Mtime: 1244436044, - Typeflag: '0', - Uname: "dsymonds", - Gname: "eng", + Name: "small2.txt", + Mode: 0640, + Uid: 73025, + Gid: 5000, + Size: 11, + Mtime: 1244436044, + Typeflag: '0', + Uname: "dsymonds", + Gname: "eng", }, }, }, &untarTest{ - file: "testdata/star.tar", + file: "testdata/star.tar", headers: []*Header{ &Header{ - Name: "small.txt", - Mode: 0640, - Uid: 73025, - Gid: 5000, - Size: 5, - Mtime: 1244592783, - Typeflag: '0', - Uname: "dsymonds", - Gname: "eng", - Atime: 1244592783, - Ctime: 1244592783, + Name: "small.txt", + Mode: 0640, + Uid: 73025, + Gid: 5000, + Size: 5, + Mtime: 1244592783, + Typeflag: '0', + Uname: "dsymonds", + Gname: "eng", + Atime: 1244592783, + Ctime: 1244592783, }, &Header{ - Name: "small2.txt", - Mode: 0640, - Uid: 73025, - Gid: 5000, - Size: 11, - Mtime: 1244592783, - Typeflag: '0', - Uname: "dsymonds", - Gname: "eng", - Atime: 1244592783, - Ctime: 1244592783, + Name: "small2.txt", + Mode: 0640, + Uid: 73025, + Gid: 5000, + Size: 11, + Mtime: 1244592783, + Typeflag: '0', + Uname: "dsymonds", + Gname: "eng", + Atime: 1244592783, + Ctime: 1244592783, }, }, }, &untarTest{ - file: "testdata/v7.tar", + file: "testdata/v7.tar", headers: []*Header{ &Header{ - Name: "small.txt", - Mode: 0444, - Uid: 73025, - Gid: 5000, - Size: 5, - Mtime: 1244593104, - Typeflag: '\x00', + Name: "small.txt", + Mode: 0444, + Uid: 73025, + Gid: 5000, + Size: 5, + Mtime: 1244593104, + Typeflag: '\x00', }, &Header{ - Name: "small2.txt", - Mode: 0444, - Uid: 73025, - Gid: 5000, - Size: 11, - Mtime: 1244593104, - Typeflag: '\x00', + Name: "small2.txt", + Mode: 0444, + Uid: 73025, + Gid: 5000, + Size: 11, + Mtime: 1244593104, + Typeflag: '\x00', }, }, }, } var facts = map[int]string{ - 0: "1", - 1: "1", - 2: "2", - 10: "3628800", - 20: "2432902008176640000", + 0: "1", + 1: "1", + 2: "2", + 10: "3628800", + 20: "2432902008176640000", 100: "933262154439441526816992388562667004907159682643816214685929" + "638952175999932299156089414639761565182862536979208272237582" + "51185210916864000000000000000000000000", diff --git a/src/pkg/go/token/token.go b/src/pkg/go/token/token.go index df4064c00..70c2501e9 100644 --- a/src/pkg/go/token/token.go +++ b/src/pkg/go/token/token.go @@ -135,14 +135,14 @@ const ( var tokens = map[Token]string{ ILLEGAL: "ILLEGAL", - EOF: "EOF", + EOF: "EOF", COMMENT: "COMMENT", - IDENT: "IDENT", - INT: "INT", - FLOAT: "FLOAT", - IMAG: "IMAG", - CHAR: "CHAR", + IDENT: "IDENT", + INT: "INT", + FLOAT: "FLOAT", + IMAG: "IMAG", + CHAR: "CHAR", STRING: "STRING", ADD: "+", @@ -151,11 +151,11 @@ var tokens = map[Token]string{ QUO: "/", REM: "%", - AND: "&", - OR: "|", - XOR: "^", - SHL: "<<", - SHR: ">>", + AND: "&", + OR: "|", + XOR: "^", + SHL: "<<", + SHR: ">>", AND_NOT: "&^", ADD_ASSIGN: "+=", @@ -164,72 +164,72 @@ var tokens = map[Token]string{ QUO_ASSIGN: "/=", REM_ASSIGN: "%=", - AND_ASSIGN: "&=", - OR_ASSIGN: "|=", - XOR_ASSIGN: "^=", - SHL_ASSIGN: "<<=", - SHR_ASSIGN: ">>=", + AND_ASSIGN: "&=", + OR_ASSIGN: "|=", + XOR_ASSIGN: "^=", + SHL_ASSIGN: "<<=", + SHR_ASSIGN: ">>=", AND_NOT_ASSIGN: "&^=", - LAND: "&&", - LOR: "||", + LAND: "&&", + LOR: "||", ARROW: "<-", - INC: "++", - DEC: "--", + INC: "++", + DEC: "--", - EQL: "==", - LSS: "<", - GTR: ">", + EQL: "==", + LSS: "<", + GTR: ">", ASSIGN: "=", - NOT: "!", + NOT: "!", - NEQ: "!=", - LEQ: "<=", - GEQ: ">=", - DEFINE: ":=", + NEQ: "!=", + LEQ: "<=", + GEQ: ">=", + DEFINE: ":=", ELLIPSIS: "...", LPAREN: "(", LBRACK: "[", LBRACE: "{", - COMMA: ",", + COMMA: ",", PERIOD: ".", - RPAREN: ")", - RBRACK: "]", - RBRACE: "}", + RPAREN: ")", + RBRACK: "]", + RBRACE: "}", SEMICOLON: ";", - COLON: ":", + COLON: ":", - BREAK: "break", - CASE: "case", - CHAN: "chan", - CONST: "const", + BREAK: "break", + CASE: "case", + CHAN: "chan", + CONST: "const", CONTINUE: "continue", - DEFAULT: "default", - DEFER: "defer", - ELSE: "else", + DEFAULT: "default", + DEFER: "defer", + ELSE: "else", FALLTHROUGH: "fallthrough", - FOR: "for", + FOR: "for", - FUNC: "func", - GO: "go", - GOTO: "goto", - IF: "if", + FUNC: "func", + GO: "go", + GOTO: "goto", + IF: "if", IMPORT: "import", INTERFACE: "interface", - MAP: "map", - PACKAGE: "package", - RANGE: "range", - RETURN: "return", + MAP: "map", + PACKAGE: "package", + RANGE: "range", + RETURN: "return", SELECT: "select", STRUCT: "struct", SWITCH: "switch", - TYPE: "type", - VAR: "var", + TYPE: "type", + VAR: "var", } |