mirror of
https://github.com/golang/go
synced 2024-11-22 05:44:41 -07:00
go/printer: revert "do not treat comments inside a ast.Decl as godoc"
This reverts commit CL 609077. Reason for revert: it turned out to also introduce a change to the formatting as described in issue #69382, which wasn't intended. For #69382. Change-Id: Id8f36e5503e63e7586c8afe7c7d3dc25fd56ed94 Reviewed-on: https://go-review.googlesource.com/c/go/+/612137 Reviewed-by: Christian Höppner <hoeppi@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
This commit is contained in:
parent
90391c2e8a
commit
ad6ee21bbf
@ -1737,9 +1737,6 @@ func (p *printer) genDecl(d *ast.GenDecl) {
|
|||||||
p.setPos(d.Pos())
|
p.setPos(d.Pos())
|
||||||
p.print(d.Tok, blank)
|
p.print(d.Tok, blank)
|
||||||
|
|
||||||
defer func(d bool) { p.inDecl = d }(p.inDecl)
|
|
||||||
p.inDecl = true
|
|
||||||
|
|
||||||
if d.Lparen.IsValid() || len(d.Specs) != 1 {
|
if d.Lparen.IsValid() || len(d.Specs) != 1 {
|
||||||
// group of parenthesized declarations
|
// group of parenthesized declarations
|
||||||
p.setPos(d.Lparen)
|
p.setPos(d.Lparen)
|
||||||
@ -1924,10 +1921,6 @@ func (p *printer) funcDecl(d *ast.FuncDecl) {
|
|||||||
p.setComment(d.Doc)
|
p.setComment(d.Doc)
|
||||||
p.setPos(d.Pos())
|
p.setPos(d.Pos())
|
||||||
p.print(token.FUNC, blank)
|
p.print(token.FUNC, blank)
|
||||||
|
|
||||||
defer func(d bool) { p.inDecl = d }(p.inDecl)
|
|
||||||
p.inDecl = true
|
|
||||||
|
|
||||||
// We have to save startCol only after emitting FUNC; otherwise it can be on a
|
// We have to save startCol only after emitting FUNC; otherwise it can be on a
|
||||||
// different line (all whitespace preceding the FUNC is emitted only when the
|
// different line (all whitespace preceding the FUNC is emitted only when the
|
||||||
// FUNC is emitted).
|
// FUNC is emitted).
|
||||||
|
@ -63,7 +63,6 @@ type printer struct {
|
|||||||
mode pmode // current printer mode
|
mode pmode // current printer mode
|
||||||
endAlignment bool // if set, terminate alignment immediately
|
endAlignment bool // if set, terminate alignment immediately
|
||||||
impliedSemi bool // if set, a linebreak implies a semicolon
|
impliedSemi bool // if set, a linebreak implies a semicolon
|
||||||
inDecl bool // if set, printer is inside declaration (after first token)
|
|
||||||
lastTok token.Token // last token printed (token.ILLEGAL if it's whitespace)
|
lastTok token.Token // last token printed (token.ILLEGAL if it's whitespace)
|
||||||
prevOpen token.Token // previous non-brace "open" token (, [, or token.ILLEGAL
|
prevOpen token.Token // previous non-brace "open" token (, [, or token.ILLEGAL
|
||||||
wsbuf []whiteSpace // delayed white space
|
wsbuf []whiteSpace // delayed white space
|
||||||
@ -740,9 +739,8 @@ func (p *printer) intersperseComments(next token.Position, tok token.Token) (wro
|
|||||||
for p.commentBefore(next) {
|
for p.commentBefore(next) {
|
||||||
list := p.comment.List
|
list := p.comment.List
|
||||||
changed := false
|
changed := false
|
||||||
if !p.inDecl &&
|
if p.lastTok != token.IMPORT && // do not rewrite cgo's import "C" comments
|
||||||
p.lastTok != token.IMPORT && // do not rewrite cgo's import "C" comments
|
p.posFor(p.comment.Pos()).Column == 1 &&
|
||||||
p.posFor(p.comment.Pos()).Line != p.last.Line &&
|
|
||||||
p.posFor(p.comment.End()+1) == next {
|
p.posFor(p.comment.End()+1) == next {
|
||||||
// Unindented comment abutting next token position:
|
// Unindented comment abutting next token position:
|
||||||
// a top-level doc comment.
|
// a top-level doc comment.
|
||||||
|
@ -16,7 +16,6 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@ -864,192 +863,3 @@ func TestEmptyDecl(t *testing.T) { // issue 63566
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDocFormat(t *testing.T) {
|
|
||||||
cases := []struct {
|
|
||||||
src string
|
|
||||||
want string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
src: `package main
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
//
|
|
||||||
//go:directive
|
|
||||||
// test
|
|
||||||
//
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
want: `package main
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
//
|
|
||||||
//go:directive
|
|
||||||
// test
|
|
||||||
//
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: `package main
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
//go:directive
|
|
||||||
// test
|
|
||||||
type a struct{}
|
|
||||||
|
|
||||||
//go:directive
|
|
||||||
// test
|
|
||||||
test()
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
want: `package main
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
//go:directive
|
|
||||||
// test
|
|
||||||
type a struct{}
|
|
||||||
|
|
||||||
//go:directive
|
|
||||||
// test
|
|
||||||
test()
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: `package main
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
//go:directive
|
|
||||||
// test
|
|
||||||
type a struct{}
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
want: `package main
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
//go:directive
|
|
||||||
// test
|
|
||||||
type a struct{}
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: `package main
|
|
||||||
|
|
||||||
func a() {
|
|
||||||
//line a:5:1
|
|
||||||
//
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
want: `package main
|
|
||||||
|
|
||||||
func a() {
|
|
||||||
//line a:5:1
|
|
||||||
//
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
src: `package main
|
|
||||||
|
|
||||||
// test comment
|
|
||||||
//go:directive2
|
|
||||||
// test comment
|
|
||||||
func main() {
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
want: `package main
|
|
||||||
|
|
||||||
// test comment
|
|
||||||
// test comment
|
|
||||||
//
|
|
||||||
//go:directive2
|
|
||||||
func main() {
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: `package main
|
|
||||||
|
|
||||||
// test comment
|
|
||||||
//go:directive2
|
|
||||||
// test comment
|
|
||||||
func main() {
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
want: `package main
|
|
||||||
|
|
||||||
// test comment
|
|
||||||
// test comment
|
|
||||||
//
|
|
||||||
//go:directive2
|
|
||||||
func main() {
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: `package main
|
|
||||||
|
|
||||||
/* test
|
|
||||||
*/ // test comment
|
|
||||||
//go:directive2
|
|
||||||
// test comment
|
|
||||||
func main() {
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
want: `package main
|
|
||||||
|
|
||||||
/* test
|
|
||||||
*/ // test comment
|
|
||||||
//go:directive2
|
|
||||||
// test comment
|
|
||||||
func main() {
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
src: `package main //comment
|
|
||||||
var a int = 4 //comment
|
|
||||||
func a() {
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
want: `package main //comment
|
|
||||||
var a int = 4 //comment
|
|
||||||
func a() {
|
|
||||||
}
|
|
||||||
`,
|
|
||||||
},
|
|
||||||
|
|
||||||
// Edge case found by a fuzzer, not a real-world example.
|
|
||||||
{
|
|
||||||
src: "package A\n\nimport(\"\f\"\n//\n\"\")",
|
|
||||||
want: "package A\n\nimport (\n\t\"\f\" //\n\t\"\"\n)\n",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
src: "package A\n\nimport(`\f`\n//\n\"\")",
|
|
||||||
want: "package A\n\nimport (\n\t`\f` //\n\t\"\"\n)\n",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tt := range cases {
|
|
||||||
fset := token.NewFileSet()
|
|
||||||
f, err := parser.ParseFile(fset, "test.go", tt.src, parser.ParseComments|parser.SkipObjectResolution)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var buf strings.Builder
|
|
||||||
cfg := Config{Tabwidth: 8, Mode: UseSpaces | TabIndent}
|
|
||||||
if err := cfg.Fprint(&buf, fset, f); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
got := buf.String()
|
|
||||||
if got != tt.want {
|
|
||||||
t.Errorf("source\n%v\nformatted as:\n%v\nwant formatted as:\n%v", tt.src, got, tt.want)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user