diff options
| author | Robert Griesemer <gri@golang.org> | 2009-07-29 17:01:09 -0700 |
|---|---|---|
| committer | Robert Griesemer <gri@golang.org> | 2009-07-29 17:01:09 -0700 |
| commit | 53abf93013954216d6521b5a10a2202f7d7bcb36 (patch) | |
| tree | fe5b6fe43fb4577157bd2c05385b8db29866ebcc /src/pkg/go/parser/interface.go | |
| parent | 297317cfed550069aeb8442f968d5cdcec9908aa (diff) | |
| download | golang-53abf93013954216d6521b5a10a2202f7d7bcb36.tar.gz | |
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
Diffstat (limited to 'src/pkg/go/parser/interface.go')
| -rw-r--r-- | src/pkg/go/parser/interface.go | 19 |
1 files changed, 10 insertions, 9 deletions
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; } |
