]> Cypherpunks repositories - gostls13.git/commitdiff
go/printer: preserve newlines in func parameter lists
authorJamie Gennis <jgennis@google.com>
Thu, 2 Dec 2010 18:42:10 +0000 (10:42 -0800)
committerRobert Griesemer <gri@golang.org>
Thu, 2 Dec 2010 18:42:10 +0000 (10:42 -0800)
Fixes #1179.

R=gri
CC=golang-dev
https://golang.org/cl/3225042

src/pkg/go/printer/nodes.go
src/pkg/go/printer/testdata/declarations.golden
src/pkg/go/printer/testdata/declarations.input

index b58277ccf3a72924b00aaf422b3252f6320f73b8..e21caf6add40eeabced5e651a3d5a2583b7d5543 100644 (file)
@@ -92,7 +92,7 @@ const (
 
 
 // Sets multiLine to true if the identifier list spans multiple lines.
-// If ident is set, a multi-line identifier list is indented after the
+// If indent is set, a multi-line identifier list is indented after the
 // first linebreak encountered.
 func (p *printer) identList(list []*ast.Ident, indent bool, multiLine *bool) {
        // convert into an expression list so we can re-use exprList formatting
@@ -298,15 +298,27 @@ func (p *printer) exprList(prev token.Position, list []ast.Expr, depth int, mode
 func (p *printer) parameters(fields *ast.FieldList, multiLine *bool) {
        p.print(fields.Opening, token.LPAREN)
        if len(fields.List) > 0 {
+               var prevLine, line int
                for i, par := range fields.List {
                        if i > 0 {
-                               p.print(token.COMMA, blank)
+                               p.print(token.COMMA)
+                               if len(par.Names) > 0 {
+                                       line = par.Names[0].Pos().Line
+                               } else {
+                                       line = par.Type.Pos().Line
+                               }
+                               if 0 < prevLine && prevLine < line && p.linebreak(line, 0, ignore, true) {
+                                       *multiLine = true
+                               } else {
+                                       p.print(blank)
+                               }
                        }
                        if len(par.Names) > 0 {
                                p.identList(par.Names, false, multiLine)
                                p.print(blank)
                        }
                        p.expr(par.Type, multiLine)
+                       prevLine = par.Type.Pos().Line
                }
        }
        p.print(fields.Closing, token.RPAREN)
index 394460c9d500e16eb2709bbb2bb32fa597131468..1c091b9295e368baa5e1cdd0b0be44d247749f3c 100644 (file)
@@ -656,3 +656,60 @@ func _(x ...func())
 func _(x ...func(...int))
 func _(x ...map[string]int)
 func _(x ...chan int)
+
+
+// these parameter lists must remain multi-line since they are multi-line in the source
+func _(bool,
+int) {
+}
+func _(x bool,
+y int) {
+}
+func _(x,
+y bool) {
+}
+func _(bool,   // comment
+int) {
+}
+func _(x bool, // comment
+y int) {
+}
+func _(x,      // comment
+y bool) {
+}
+func _(bool,   // comment
+// comment
+int) {
+}
+func _(x bool, // comment
+// comment
+y int) {
+}
+func _(x,      // comment
+// comment
+y bool) {
+}
+func _(bool,
+// comment
+int) {
+}
+func _(x bool,
+// comment
+y int) {
+}
+func _(x,
+// comment
+y bool) {
+}
+func _(x,      // comment
+y,     // comment
+z bool) {
+}
+func _(x,      // comment
+y,     // comment
+z bool) {
+}
+func _(x int,  // comment
+y float,       // comment
+z bool) {
+}
index 94e659daba051e881c2b94b53bf16dfcf8ed58dd..c826462f9dce05b88351552993868f8913d822c8 100644 (file)
@@ -644,3 +644,60 @@ func _(x ...func())
 func _(x ...func(...int))
 func _(x ...map[string]int)
 func _(x ...chan int)
+
+
+// these parameter lists must remain multi-line since they are multi-line in the source
+func _(bool,
+int) {
+}
+func _(x bool,
+y int) {
+}
+func _(x,
+y bool) {
+}
+func _(bool, // comment
+int) {
+}
+func _(x bool, // comment
+y int) {
+}
+func _(x, // comment
+y bool) {
+}
+func _(bool, // comment
+// comment
+int) {
+}
+func _(x bool, // comment
+// comment
+y int) {
+}
+func _(x, // comment
+// comment
+y bool) {
+}
+func _(bool,
+// comment
+int) {
+}
+func _(x bool,
+// comment
+y int) {
+}
+func _(x,
+// comment
+y bool) {
+}
+func _(x, // comment
+y,// comment
+z bool) {
+}
+func _(x, // comment
+       y,// comment
+       z bool) {
+}
+func _(x int,  // comment
+       y float,        // comment
+       z bool) {
+}