Commit 789b31a4 authored by Robert Griesemer's avatar Robert Griesemer

better placement of /*-style comments interspersed with code on one line

R=rsc
http://go/go-review/1017030
parent 5d436b9d
...@@ -256,11 +256,10 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, isFirst, isKeywor ...@@ -256,11 +256,10 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, isFirst, isKeywor
return; return;
} }
n := pos.Line - p.last.Line; if pos.Line == p.last.Line {
if n == 0 {
// comment on the same line as last item: // comment on the same line as last item:
// separate with at least one tab // separate with at least one separator
hasTab := false; hasSep := false;
if isFirst { if isFirst {
j := 0; j := 0;
for i, ch := range p.buffer { for i, ch := range p.buffer {
...@@ -272,7 +271,7 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, isFirst, isKeywor ...@@ -272,7 +271,7 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, isFirst, isKeywor
case vtab: case vtab:
// respect existing tabs - important // respect existing tabs - important
// for proper formatting of commented structs // for proper formatting of commented structs
hasTab = true; hasSep = true;
continue; continue;
case indent: case indent:
// apply pending indentation // apply pending indentation
...@@ -283,9 +282,16 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, isFirst, isKeywor ...@@ -283,9 +282,16 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, isFirst, isKeywor
} }
p.writeWhitespace(j); p.writeWhitespace(j);
} }
// make sure there is at least one tab // make sure there is at least one separator
if !hasTab { if !hasSep {
p.write(htab); 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 { } else {
...@@ -321,7 +327,7 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, isFirst, isKeywor ...@@ -321,7 +327,7 @@ func (p *printer) writeCommentPrefix(pos, next token.Position, isFirst, isKeywor
} }
p.writeWhitespace(j); p.writeWhitespace(j);
} }
p.writeNewlines(n); p.writeNewlines(pos.Line - p.last.Line);
} }
} }
...@@ -560,14 +566,21 @@ func (p *printer) writeCommentSuffix(needsLinebreak bool) { ...@@ -560,14 +566,21 @@ func (p *printer) writeCommentSuffix(needsLinebreak bool) {
func (p *printer) intersperseComments(next token.Position, isKeyword bool) { func (p *printer) intersperseComments(next token.Position, isKeyword bool) {
isFirst := true; isFirst := true;
needsLinebreak := false; needsLinebreak := false;
var last *ast.Comment;
for ; p.commentBefore(next); p.comment = p.comment.Next { for ; p.commentBefore(next); p.comment = p.comment.Next {
for _, c := range p.comment.List { for _, c := range p.comment.List {
p.writeCommentPrefix(c.Pos(), next, isFirst, isKeyword); p.writeCommentPrefix(c.Pos(), next, isFirst, isKeyword);
isFirst = false; isFirst = false;
p.writeComment(c); p.writeComment(c);
needsLinebreak = c.Text[1] == '/'; 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); p.writeCommentSuffix(needsLinebreak);
} }
......
...@@ -215,6 +215,11 @@ func _() { ...@@ -215,6 +215,11 @@ func _() {
} }
// Some interesting interspersed comments
func _(/* this */x/* is *//* an */ int) {
}
// Line comments with tabs // Line comments with tabs
func _() { func _() {
var finput *bufio.Reader; // input file var finput *bufio.Reader; // input file
......
...@@ -215,6 +215,11 @@ func _() { ...@@ -215,6 +215,11 @@ func _() {
} }
// Some interesting interspersed comments
func _( /* this */ x /* is */ /* an */ int) {
}
// Line comments with tabs // Line comments with tabs
func _() { func _() {
var finput *bufio.Reader; // input file var finput *bufio.Reader; // input file
......
...@@ -294,7 +294,7 @@ func _() { ...@@ -294,7 +294,7 @@ func _() {
// formatting of structs // formatting of structs
type _ struct{} type _ struct{}
type _ struct { /* this comment should be visible */} type _ struct { /* this comment should be visible */ }
type _ struct { type _ struct {
// this comment should be visible and properly indented // this comment should be visible and properly indented
......
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