Commit b88b38ac authored by Jamie Gennis's avatar Jamie Gennis Committed by Robert Griesemer

go/printer: preserve newlines in func parameter lists

Fixes #1179.

R=gri
CC=golang-dev
https://golang.org/cl/3225042
parent 4f852622
...@@ -92,7 +92,7 @@ const ( ...@@ -92,7 +92,7 @@ const (
// Sets multiLine to true if the identifier list spans multiple lines. // 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. // first linebreak encountered.
func (p *printer) identList(list []*ast.Ident, indent bool, multiLine *bool) { func (p *printer) identList(list []*ast.Ident, indent bool, multiLine *bool) {
// convert into an expression list so we can re-use exprList formatting // 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 ...@@ -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) { func (p *printer) parameters(fields *ast.FieldList, multiLine *bool) {
p.print(fields.Opening, token.LPAREN) p.print(fields.Opening, token.LPAREN)
if len(fields.List) > 0 { if len(fields.List) > 0 {
var prevLine, line int
for i, par := range fields.List { for i, par := range fields.List {
if i > 0 { 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 { if len(par.Names) > 0 {
p.identList(par.Names, false, multiLine) p.identList(par.Names, false, multiLine)
p.print(blank) p.print(blank)
} }
p.expr(par.Type, multiLine) p.expr(par.Type, multiLine)
prevLine = par.Type.Pos().Line
} }
} }
p.print(fields.Closing, token.RPAREN) p.print(fields.Closing, token.RPAREN)
......
...@@ -656,3 +656,60 @@ func _(x ...func()) ...@@ -656,3 +656,60 @@ func _(x ...func())
func _(x ...func(...int)) func _(x ...func(...int))
func _(x ...map[string]int) func _(x ...map[string]int)
func _(x ...chan 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) {
}
...@@ -644,3 +644,60 @@ func _(x ...func()) ...@@ -644,3 +644,60 @@ func _(x ...func())
func _(x ...func(...int)) func _(x ...func(...int))
func _(x ...map[string]int) func _(x ...map[string]int)
func _(x ...chan 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) {
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment