diff options
| author | Rob Pike <r@golang.org> | 2017-11-20 14:12:43 +1100 |
|---|---|---|
| committer | Rob Pike <r@golang.org> | 2017-11-20 05:08:37 +0000 |
| commit | 337f04bd6c2b049a68eabd9dcec4f47cd6933d94 (patch) | |
| tree | 1b517f56782b71e8c8042983eac9582e16297c1a /src/cmd/doc/pkg.go | |
| parent | 363a5da3b86c2f90c0b2055c37617e8b3bc85fd8 (diff) | |
| download | go-337f04bd6c2b049a68eabd9dcec4f47cd6933d94.tar.xz | |
cmd/doc: don't print a declaration twice
That can occur if we have -u set and there is an upper- and lower-case
name of the same spelling in a single declaration.
A rare corner case but easy to fix.
Fix by remembering what we've printed.
Fixes #21797.
Change-Id: Ie0b681ae8c277fa16e9635ba594c1dff272b8aeb
Reviewed-on: https://go-review.googlesource.com/78715
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/cmd/doc/pkg.go')
| -rw-r--r-- | src/cmd/doc/pkg.go | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/cmd/doc/pkg.go b/src/cmd/doc/pkg.go index 5a14d6e7cf..99a00c5632 100644 --- a/src/cmd/doc/pkg.go +++ b/src/cmd/doc/pkg.go @@ -594,6 +594,11 @@ func (pkg *Package) symbolDoc(symbol string) bool { // Constants and variables behave the same. values := pkg.findValues(symbol, pkg.doc.Consts) values = append(values, pkg.findValues(symbol, pkg.doc.Vars)...) + // A declaration like + // const ( c = 1; C = 2 ) + // could be printed twice if the -u flag is set, as it matches twice. + // So we remember which declarations we've printed to avoid duplication. + printed := make(map[*ast.GenDecl]bool) for _, value := range values { // Print each spec only if there is at least one exported symbol in it. // (See issue 11008.) @@ -628,7 +633,7 @@ func (pkg *Package) symbolDoc(symbol string) bool { } } } - if len(specs) == 0 { + if len(specs) == 0 || printed[value.Decl] { continue } value.Decl.Specs = specs @@ -636,6 +641,7 @@ func (pkg *Package) symbolDoc(symbol string) bool { pkg.packageClause(true) } pkg.emit(value.Doc, value.Decl) + printed[value.Decl] = true found = true } // Types. |
