]> Cypherpunks repositories - gostls13.git/commitdiff
go/parser: ignore subdirectories in ParseDir
authorCarlos Alexandro Becker <caarlos0@gmail.com>
Wed, 2 Dec 2020 21:04:13 +0000 (21:04 +0000)
committerRobert Griesemer <gri@golang.org>
Wed, 2 Dec 2020 23:05:56 +0000 (23:05 +0000)
Issue and PR on GoReleaser:
- https://github.com/goreleaser/goreleaser/issues/1897
- https://github.com/goreleaser/goreleaser/pull/1899

Fixes #42951.

Change-Id: Ia0d6018e0bad59cd60cd600188c368c431032a4b
GitHub-Last-Rev: be59d85fe2d473f4dfd828a244023c4064d6e31f
GitHub-Pull-Request: golang/go#42581
Reviewed-on: https://go-review.googlesource.com/c/go/+/269897
Trust: Robert Griesemer <gri@golang.org>
Trust: Dmitri Shuralyov <dmitshur@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/go/parser/interface.go
src/go/parser/parser_test.go
src/go/parser/testdata/issue42951/not_a_file.go/invalid.go [new file with mode: 0644]

index cc7e455c4db6adebb9e06f1d8a06172f697ee9dd..d5c18a9e2db8a762a62bbaf0b6138c7857fc1c27 100644 (file)
@@ -140,7 +140,7 @@ func ParseDir(fset *token.FileSet, path string, filter func(fs.FileInfo) bool, m
 
        pkgs = make(map[string]*ast.Package)
        for _, d := range list {
-               if strings.HasSuffix(d.Name(), ".go") && (filter == nil || filter(d)) {
+               if !d.IsDir() && strings.HasSuffix(d.Name(), ".go") && (filter == nil || filter(d)) {
                        filename := filepath.Join(path, d.Name())
                        if src, err := ParseFile(fset, filename, nil, mode); err == nil {
                                name := src.Name.Name
index 7193a329fe934db8eb908b5c75e56755c7f02e40..a4f882d3688195fb2c9dd7b9270828edcf0c4cd0 100644 (file)
@@ -82,6 +82,14 @@ func TestParseDir(t *testing.T) {
        }
 }
 
+func TestIssue42951(t *testing.T) {
+       path := "./testdata/issue42951"
+       _, err := ParseDir(token.NewFileSet(), path, nil, 0)
+       if err != nil {
+               t.Errorf("ParseDir(%s): %v", path, err)
+       }
+}
+
 func TestParseExpr(t *testing.T) {
        // just kicking the tires:
        // a valid arithmetic expression
diff --git a/src/go/parser/testdata/issue42951/not_a_file.go/invalid.go b/src/go/parser/testdata/issue42951/not_a_file.go/invalid.go
new file mode 100644 (file)
index 0000000..bb698be
--- /dev/null
@@ -0,0 +1 @@
+This file should not be parsed by ParseDir.