mirror of
https://github.com/golang/go
synced 2024-11-13 17:40:23 -07:00
go/printer: don't print newlines for empty statements
Fixes #3466. gofmt -w src misc causes no changes. R=rsc CC=golang-dev https://golang.org/cl/6206073
This commit is contained in:
parent
efa67b2c55
commit
03e1d4bc22
@ -868,28 +868,32 @@ func (p *printer) expr(x ast.Expr) {
|
|||||||
// Print the statement list indented, but without a newline after the last statement.
|
// Print the statement list indented, but without a newline after the last statement.
|
||||||
// Extra line breaks between statements in the source are respected but at most one
|
// Extra line breaks between statements in the source are respected but at most one
|
||||||
// empty line is printed between statements.
|
// empty line is printed between statements.
|
||||||
func (p *printer) stmtList(list []ast.Stmt, _indent int, nextIsRBrace bool) {
|
func (p *printer) stmtList(list []ast.Stmt, nindent int, nextIsRBrace bool) {
|
||||||
// TODO(gri): fix _indent code
|
if nindent > 0 {
|
||||||
if _indent > 0 {
|
|
||||||
p.print(indent)
|
p.print(indent)
|
||||||
}
|
}
|
||||||
multiLine := false
|
multiLine := false
|
||||||
for i, s := range list {
|
i := 0
|
||||||
|
for _, s := range list {
|
||||||
|
// ignore empty statements (was issue 3466)
|
||||||
|
if _, isEmpty := s.(*ast.EmptyStmt); !isEmpty {
|
||||||
// _indent == 0 only for lists of switch/select case clauses;
|
// _indent == 0 only for lists of switch/select case clauses;
|
||||||
// in those cases each clause is a new section
|
// in those cases each clause is a new section
|
||||||
p.linebreak(p.lineFor(s.Pos()), 1, ignore, i == 0 || _indent == 0 || multiLine)
|
p.linebreak(p.lineFor(s.Pos()), 1, ignore, i == 0 || nindent == 0 || multiLine)
|
||||||
p.stmt(s, nextIsRBrace && i == len(list)-1)
|
p.stmt(s, nextIsRBrace && i == len(list)-1)
|
||||||
multiLine = p.isMultiLine(s)
|
multiLine = p.isMultiLine(s)
|
||||||
|
i++
|
||||||
}
|
}
|
||||||
if _indent > 0 {
|
}
|
||||||
|
if nindent > 0 {
|
||||||
p.print(unindent)
|
p.print(unindent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// block prints an *ast.BlockStmt; it always spans at least two lines.
|
// block prints an *ast.BlockStmt; it always spans at least two lines.
|
||||||
func (p *printer) block(s *ast.BlockStmt, indent int) {
|
func (p *printer) block(s *ast.BlockStmt, nindent int) {
|
||||||
p.print(s.Pos(), token.LBRACE)
|
p.print(s.Pos(), token.LBRACE)
|
||||||
p.stmtList(s.List, indent, true)
|
p.stmtList(s.List, nindent, true)
|
||||||
p.linebreak(p.lineFor(s.Rbrace), 1, ignore, true)
|
p.linebreak(p.lineFor(s.Rbrace), 1, ignore, true)
|
||||||
p.print(s.Rbrace, token.RBRACE)
|
p.print(s.Rbrace, token.RBRACE)
|
||||||
}
|
}
|
||||||
|
26
src/pkg/go/printer/testdata/statements.golden
vendored
26
src/pkg/go/printer/testdata/statements.golden
vendored
@ -527,3 +527,29 @@ AVeryLongLabelThatShouldNotAffectFormatting:
|
|||||||
// There should be a single empty line before this comment.
|
// There should be a single empty line before this comment.
|
||||||
MoreCode()
|
MoreCode()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Formatting of empty statements.
|
||||||
|
func _() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
f()
|
||||||
|
}
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
L:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
L:
|
||||||
|
;
|
||||||
|
f()
|
||||||
|
}
|
||||||
|
24
src/pkg/go/printer/testdata/statements.input
vendored
24
src/pkg/go/printer/testdata/statements.input
vendored
@ -468,3 +468,27 @@ AVeryLongLabelThatShouldNotAffectFormatting:
|
|||||||
// There should be a single empty line before this comment.
|
// There should be a single empty line before this comment.
|
||||||
MoreCode()
|
MoreCode()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Formatting of empty statements.
|
||||||
|
func _() {
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
}
|
||||||
|
|
||||||
|
func _() {;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
}
|
||||||
|
|
||||||
|
func _() {;;;;;;;;;;;;;;;;;;;;;;;;;}
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
f();;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
}
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
L:;;;;;;;;;;;;
|
||||||
|
}
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
L:;;;;;;;;;;;;
|
||||||
|
f()
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user