From 789b31a416d1c321984d6ede3381f41b11570740 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 4 Nov 2009 15:33:28 -0800 Subject: [PATCH] better placement of /*-style comments interspersed with code on one line R=rsc http://go/go-review/1017030 --- src/pkg/go/printer/printer.go | 31 +++++++++++++------ src/pkg/go/printer/testdata/comments.go | 5 +++ src/pkg/go/printer/testdata/comments.golden | 5 +++ .../go/printer/testdata/declarations.golden | 2 +- 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/pkg/go/printer/printer.go b/src/pkg/go/printer/printer.go index 1511beee97..6c649eb38c 100644 --- a/src/pkg/go/printer/printer.go +++ b/src/pkg/go/printer/printer.go @@ -256,11 +256,10 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, isFirst, isKeywor return; } - n := pos.Line - p.last.Line; - if n == 0 { + if pos.Line == p.last.Line { // comment on the same line as last item: - // separate with at least one tab - hasTab := false; + // separate with at least one separator + hasSep := false; if isFirst { j := 0; for i, ch := range p.buffer { @@ -272,7 +271,7 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, isFirst, isKeywor case vtab: // respect existing tabs - important // for proper formatting of commented structs - hasTab = true; + hasSep = true; continue; case indent: // apply pending indentation @@ -283,9 +282,16 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, isFirst, isKeywor } p.writeWhitespace(j); } - // make sure there is at least one tab - if !hasTab { - p.write(htab); + // make sure there is at least one separator + if !hasSep { + if pos.Line == next.Line { + // next item is on the same line as the comment + // (which must be a /*-style comment): separate + // with a blank instead of a tab + p.write([]byte{' '}); + } else { + p.write(htab); + } } } else { @@ -321,7 +327,7 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, isFirst, isKeywor } p.writeWhitespace(j); } - p.writeNewlines(n); + p.writeNewlines(pos.Line - p.last.Line); } } @@ -560,14 +566,21 @@ func (p *printer) writeCommentSuffix(needsLinebreak bool) { func (p *printer) intersperseComments(next token.Position, isKeyword bool) { isFirst := true; needsLinebreak := false; + var last *ast.Comment; for ; p.commentBefore(next); p.comment = p.comment.Next { for _, c := range p.comment.List { p.writeCommentPrefix(c.Pos(), next, isFirst, isKeyword); isFirst = false; p.writeComment(c); needsLinebreak = c.Text[1] == '/'; + last = c; } } + if last != nil && !needsLinebreak && last.Pos().Line == next.Line { + // the last comment is a /*-style comment and the next item + // follows on the same line: separate with an extra blank + p.write([]byte{' '}); + } p.writeCommentSuffix(needsLinebreak); } diff --git a/src/pkg/go/printer/testdata/comments.go b/src/pkg/go/printer/testdata/comments.go index 38acce5cbb..05399a3c6d 100644 --- a/src/pkg/go/printer/testdata/comments.go +++ b/src/pkg/go/printer/testdata/comments.go @@ -215,6 +215,11 @@ func _() { } +// Some interesting interspersed comments +func _(/* this */x/* is *//* an */ int) { +} + + // Line comments with tabs func _() { var finput *bufio.Reader; // input file diff --git a/src/pkg/go/printer/testdata/comments.golden b/src/pkg/go/printer/testdata/comments.golden index 2f4fb24071..5772c56298 100644 --- a/src/pkg/go/printer/testdata/comments.golden +++ b/src/pkg/go/printer/testdata/comments.golden @@ -215,6 +215,11 @@ func _() { } +// Some interesting interspersed comments +func _( /* this */ x /* is */ /* an */ int) { +} + + // Line comments with tabs func _() { var finput *bufio.Reader; // input file diff --git a/src/pkg/go/printer/testdata/declarations.golden b/src/pkg/go/printer/testdata/declarations.golden index 2071543c52..2f5cf6059f 100644 --- a/src/pkg/go/printer/testdata/declarations.golden +++ b/src/pkg/go/printer/testdata/declarations.golden @@ -294,7 +294,7 @@ func _() { // formatting of structs type _ struct{} -type _ struct { /* this comment should be visible */} +type _ struct { /* this comment should be visible */ } type _ struct { // this comment should be visible and properly indented -- 2.50.0