mirror of
https://github.com/golang/go
synced 2024-11-25 06:07:58 -07:00
go/printer: preserve newlines in func parameter lists
Fixes #1179. R=gri CC=golang-dev https://golang.org/cl/3225042
This commit is contained in:
parent
4f8526223f
commit
b88b38ac12
@ -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)
|
||||
|
57
src/pkg/go/printer/testdata/declarations.golden
vendored
57
src/pkg/go/printer/testdata/declarations.golden
vendored
@ -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) {
|
||||
}
|
||||
|
57
src/pkg/go/printer/testdata/declarations.input
vendored
57
src/pkg/go/printer/testdata/declarations.input
vendored
@ -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) {
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user