From 53abf93013954216d6521b5a10a2202f7d7bcb36 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 29 Jul 2009 17:01:09 -0700 Subject: parser: - Changed filter function for parser.ParsePackage to take an *os.Dir instead of a filename for more powerful filters - Removed TODO in ast.PackageInterface: Now collect package comments from all package files - Cleanups in godoc: Use the new ParsePackage and PackageInterface functions; as a result computing package information is much simpler now. R=rsc DELTA=285 (80 added, 110 deleted, 95 changed) OCL=32473 CL=32486 --- src/pkg/go/parser/interface.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'src/pkg/go/parser/interface.go') diff --git a/src/pkg/go/parser/interface.go b/src/pkg/go/parser/interface.go index f3a46da40..5fa60c1cd 100644 --- a/src/pkg/go/parser/interface.go +++ b/src/pkg/go/parser/interface.go @@ -148,30 +148,31 @@ func ParsePkgFile(pkgname, filename string, mode uint) (*ast.File, os.Error) { // ParsePackage parses all files in the directory specified by path and // returns an AST representing the package found. The set of files may be // restricted by providing a non-nil filter function; only the files with -// (path-local) filenames passing through the filter are considered. If -// zero or more then one package is found, an error is returned. Mode -// flags that control the amount of source text parsed are ignored. +// os.Dir entries passing through the filter are considered. +// If ParsePackage does not find exactly one package, it returns an error. +// Mode flags that control the amount of source text parsed are ignored. // -func ParsePackage(path string, filter func(string) bool, mode uint) (*ast.Package, os.Error) { +func ParsePackage(path string, filter func(*os.Dir) bool, mode uint) (*ast.Package, os.Error) { fd, err := os.Open(path, os.O_RDONLY, 0); if err != nil { return nil, err; } - list, err := fd.Readdirnames(-1); + list, err := fd.Readdir(-1); if err != nil { return nil, err; } name := ""; files := make(map[string]*ast.File); - for _, filename := range list { - if filter == nil || filter(filename) { - src, err := ParsePkgFile(name, pathutil.Join(path, filename), mode); + for i := 0; i < len(list); i++ { + entry := &list[i]; + if filter == nil || filter(entry) { + src, err := ParsePkgFile(name, pathutil.Join(path, entry.Name), mode); if err != nil { return nil, err; } - files[filename] = src; + files[entry.Name] = src; if name == "" { name = src.Name.Value; } -- cgit v1.2.3