diff options
author | Andrei Vieru <euvieru@gmail.com> | 2010-04-15 09:50:37 -0700 |
---|---|---|
committer | Andrei Vieru <euvieru@gmail.com> | 2010-04-15 09:50:37 -0700 |
commit | 2d20a210e4dd27c83b43dc9f72d02ecfecd203fa (patch) | |
tree | 28eddfd32c04642a5907e9efaebf947c1cacbde2 /src/pkg/go | |
parent | b055d4cc1313b6c551773a3385476a332b02cabf (diff) | |
download | golang-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.go | 24 |
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 { |