mirror of
https://github.com/golang/go.git
synced 2024-09-30 14:57:10 +00:00
better placement of /*-style comments interspersed with code on one line
R=rsc http://go/go-review/1017030
This commit is contained in:
parent
5d436b9def
commit
789b31a416
@ -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);
|
||||
}
|
||||
|
||||
|
5
src/pkg/go/printer/testdata/comments.go
vendored
5
src/pkg/go/printer/testdata/comments.go
vendored
@ -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
|
||||
|
5
src/pkg/go/printer/testdata/comments.golden
vendored
5
src/pkg/go/printer/testdata/comments.golden
vendored
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user