summaryrefslogtreecommitdiff
path: root/src/pkg/go
diff options
context:
space:
mode:
authorAndrei Vieru <euvieru@gmail.com>2010-04-15 09:50:37 -0700
committerAndrei Vieru <euvieru@gmail.com>2010-04-15 09:50:37 -0700
commit2d20a210e4dd27c83b43dc9f72d02ecfecd203fa (patch)
tree28eddfd32c04642a5907e9efaebf947c1cacbde2 /src/pkg/go
parentb055d4cc1313b6c551773a3385476a332b02cabf (diff)
downloadgolang-2d20a210e4dd27c83b43dc9f72d02ecfecd203fa.tar.gz
"godoc -src pkg_name" excludes duplicates entries
$ godoc xml | grep Copy\(\) func (c CharData) Copy() CharData func (c Comment) Copy() Comment func (d Directive) Copy() Directive func (p ProcInst) Copy() ProcInst func (e StartElement) Copy() StartElement -------------------------------------------- $ godoc -src xml | grep Copy\(\) func (c CharData) Copy() CharData -------------------------------------------- $ godoc -src xml Copy func (c CharData) Copy() CharData { return CharData(makeCopy(c)) } -------------------------------------------- The command "godoc -src pkg_name" should output the interface of the named package, but it excludes all duplicate entries. Also the command "godoc -src pkg_name method_name" will output the source code only for one method even if there are more of them with the same name in the same package. This patch set fixes this issue. R=gri CC=golang-dev http://codereview.appspot.com/883051 Committer: Robert Griesemer <gri@golang.org>
Diffstat (limited to 'src/pkg/go')
-rw-r--r--src/pkg/go/ast/filter.go24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/pkg/go/ast/filter.go b/src/pkg/go/ast/filter.go
index d1d096ffd..009ffc21d 100644
--- a/src/pkg/go/ast/filter.go
+++ b/src/pkg/go/ast/filter.go
@@ -290,6 +290,17 @@ func FilterPackage(pkg *Package, f Filter) bool {
// ----------------------------------------------------------------------------
// Merging of package files
+// The MergeMode flags control the behavior of MergePackageFiles.
+type MergeMode uint
+
+const (
+ // If set, duplicate function declarations are excluded.
+ FilterFuncDuplicates MergeMode = 1 << iota
+ // If set, comments that are not associated with a specific
+ // AST node (as Doc or Comment) are excluded.
+ FilterUnassociatedComments
+)
+
// separator is an empty //-style comment that is interspersed between
// different comment groups when they are concatenated into a single group
//
@@ -318,14 +329,9 @@ func lineAfterComment(c *Comment) token.Position {
// MergePackageFiles creates a file AST by merging the ASTs of the
-// files belonging to a package. If complete is set, the package
-// files are assumed to contain the complete, unfiltered package
-// information. In this case, MergePackageFiles collects all entities
-// and all comments. Otherwise (complete == false), MergePackageFiles
-// excludes duplicate entries and does not collect comments that are
-// not attached to AST nodes.
+// files belonging to a package. The mode flags control merging behavior.
//
-func MergePackageFiles(pkg *Package, complete bool) *File {
+func MergePackageFiles(pkg *Package, mode MergeMode) *File {
// Count the number of package docs, comments and declarations across
// all package files.
ndocs := 0
@@ -380,7 +386,7 @@ func MergePackageFiles(pkg *Package, complete bool) *File {
n := 0 // number of filtered entries
for _, f := range pkg.Files {
for _, d := range f.Decls {
- if !complete {
+ if mode&FilterFuncDuplicates != 0 {
// A language entity may be declared multiple
// times in different package files; only at
// build time declarations must be unique.
@@ -432,7 +438,7 @@ func MergePackageFiles(pkg *Package, complete bool) *File {
// Collect comments from all package files.
var comments []*CommentGroup
- if complete {
+ if mode&FilterUnassociatedComments == 0 {
comments = make([]*CommentGroup, ncomments)
i := 0
for _, f := range pkg.Files {