summaryrefslogtreecommitdiff
path: root/src/pkg/go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/go')
-rw-r--r--src/pkg/go/printer/nodes.go16
-rw-r--r--src/pkg/go/printer/testdata/declarations.golden70
-rw-r--r--src/pkg/go/printer/testdata/declarations.input12
-rw-r--r--src/pkg/go/printer/testdata/linebreaks.golden186
-rw-r--r--src/pkg/go/token/token.go102
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",
}