Skip to content

Commit

Permalink
[release-branch.go1.14] cmd/doc: fix merging comments in -src mode
Browse files Browse the repository at this point in the history
These changes fix go doc -src mode that vomits comments from random files if
filesystem does not sort files by name. The issue was with parse.ParseDir
using the Readdir order of files, which varies between platforms and filesystem
implementations. Another option is to merge comments using token.FileSet.Iterate
order in cmd/doc, but since ParseDir is mostly used in go doc, I’ve opted for
smaller change because it’s unlikely to break other uses or cause any perfomance
issues.

Example (macOS APFS): `go doc -src net.ListenPacket`

Fixes #38993

Change-Id: I7f9f368c7d9ccd9a2cbc48665f2cb9798c7b3a3f
GitHub-Last-Rev: 654fb45
GitHub-Pull-Request: #36104
Reviewed-on: https://go-review.googlesource.com/c/go/+/210999
Run-TryBot: Rob Pike <r@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
(cherry picked from commit 585e31d)
Reviewed-on: https://go-review.googlesource.com/c/go/+/235579
Run-TryBot: Andrew Bonventre <andybons@golang.org>
Reviewed-by: Andrew Gerrand <adg@golang.org>
  • Loading branch information
tie authored and andybons committed May 28, 2020
1 parent 846c00e commit a68b7d3
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 7 deletions.
34 changes: 34 additions & 0 deletions src/cmd/doc/doc_test.go
Expand Up @@ -724,6 +724,40 @@ var tests = []test{
},
},

// Merging comments with -src.
{
"merge comments with -src A",
[]string{"-src", p + "/merge", `A`},
[]string{
`A doc`,
`func A`,
`A comment`,
},
[]string{
`Package A doc`,
`Package B doc`,
`B doc`,
`B comment`,
`B doc`,
},
},
{
"merge comments with -src B",
[]string{"-src", p + "/merge", `B`},
[]string{
`B doc`,
`func B`,
`B comment`,
},
[]string{
`Package A doc`,
`Package B doc`,
`A doc`,
`A comment`,
`A doc`,
},
},

// No dups with -u. Issue 21797.
{
"case matching on, no dups",
Expand Down
7 changes: 7 additions & 0 deletions src/cmd/doc/testdata/merge/aa.go
@@ -0,0 +1,7 @@
// Package comment A.
package merge

// A doc.
func A() {
// A comment.
}
7 changes: 7 additions & 0 deletions src/cmd/doc/testdata/merge/bb.go
@@ -0,0 +1,7 @@
// Package comment B.
package merge

// B doc.
func B() {
// B comment.
}
8 changes: 1 addition & 7 deletions src/go/parser/interface.go
Expand Up @@ -133,13 +133,7 @@ func ParseFile(fset *token.FileSet, filename string, src interface{}, mode Mode)
// first error encountered are returned.
//
func ParseDir(fset *token.FileSet, path string, filter func(os.FileInfo) bool, mode Mode) (pkgs map[string]*ast.Package, first error) {
fd, err := os.Open(path)
if err != nil {
return nil, err
}
defer fd.Close()

list, err := fd.Readdir(-1)
list, err := ioutil.ReadDir(path)
if err != nil {
return nil, err
}
Expand Down

0 comments on commit a68b7d3

Please sign in to comment.