From 48838c35dc7c8e938a83db66faabf3a51f4adc3d Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 2 Dec 2020 21:04:13 +0000 Subject: [PATCH] go/parser: ignore subdirectories in ParseDir 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 Trust: Dmitri Shuralyov Run-TryBot: Robert Griesemer Reviewed-by: Robert Griesemer --- src/go/parser/interface.go | 2 +- src/go/parser/parser_test.go | 8 ++++++++ .../parser/testdata/issue42951/not_a_file.go/invalid.go | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 src/go/parser/testdata/issue42951/not_a_file.go/invalid.go diff --git a/src/go/parser/interface.go b/src/go/parser/interface.go index cc7e455c4d..d5c18a9e2d 100644 --- a/src/go/parser/interface.go +++ b/src/go/parser/interface.go @@ -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 diff --git a/src/go/parser/parser_test.go b/src/go/parser/parser_test.go index 7193a329fe..a4f882d368 100644 --- a/src/go/parser/parser_test.go +++ b/src/go/parser/parser_test.go @@ -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 index 0000000000..bb698be11c --- /dev/null +++ b/src/go/parser/testdata/issue42951/not_a_file.go/invalid.go @@ -0,0 +1 @@ +This file should not be parsed by ParseDir. -- 2.48.1