skip dirs without go files early: improve logs and save time

This commit is contained in:
golangci 2018-05-29 20:17:49 +03:00
parent 541cd1de48
commit 5363497113
2 changed files with 47 additions and 21 deletions

View File

@ -184,5 +184,21 @@ func (pr PathResolver) Resolve(paths ...string) (*PathResolveResult, error) {
state.addFile(path)
}
state.excludeDirsWithoutGoFiles()
return state.toResult(), nil
}
func (s *pathResolveState) excludeDirsWithoutGoFiles() {
dirToFiles := map[string]bool{}
for f := range s.files {
dir := filepath.Dir(f)
dirToFiles[dir] = true
}
for dir := range s.dirs {
if !dirToFiles[dir] { // no go files in this dir
delete(s.dirs, dir)
}
}
}

View File

@ -84,30 +84,27 @@ func TestPathResolverCommonCases(t *testing.T) {
{
name: "empty root recursively",
resolve: []string{"./..."},
expDirs: []string{"."},
},
{
name: "empty root",
resolve: []string{"./"},
expDirs: []string{"."},
},
{
name: "vendor is excluded recursively",
prepare: []string{"vendor/a/"},
prepare: []string{"vendor/a/b.go"},
resolve: []string{"./..."},
expDirs: []string{"."},
},
{
name: "vendor is excluded",
prepare: []string{"vendor/"},
prepare: []string{"vendor/a.go"},
resolve: []string{"./..."},
expDirs: []string{"."},
},
{
name: "vendor implicitely resolved",
prepare: []string{"vendor/"},
resolve: []string{"./vendor"},
expDirs: []string{"vendor"},
name: "vendor implicitely resolved",
prepare: []string{"vendor/a.go"},
resolve: []string{"./vendor"},
expDirs: []string{"vendor"},
expFiles: []string{"vendor/a.go"},
},
{
name: "extensions filter recursively",
@ -125,7 +122,7 @@ func TestPathResolverCommonCases(t *testing.T) {
},
{
name: "one level dirs exclusion",
prepare: []string{"a/b/", "a/c.go"},
prepare: []string{"a/b/d.go", "a/c.go"},
resolve: []string{"./a"},
expDirs: []string{"a"},
expFiles: []string{"a/c.go"},
@ -138,28 +135,27 @@ func TestPathResolverCommonCases(t *testing.T) {
expFiles: []string{"a/b/c.go", "a/d.txt"},
},
{
name: ".* is always ignored",
name: ".* dotfiles are always ignored",
prepare: []string{".git/a.go", ".circleci/b.go"},
resolve: []string{"./..."},
expDirs: []string{"."},
},
{
name: "exclude dirs on any depth level",
prepare: []string{"ok/.git/a.go"},
resolve: []string{"./..."},
expDirs: []string{".", "ok"},
name: "exclude dirs on any depth level",
prepare: []string{"ok/.git/a.go", "ok/b.go"},
resolve: []string{"./..."},
expDirs: []string{"ok"},
expFiles: []string{"ok/b.go"},
},
{
name: "ignore _*",
prepare: []string{"_any/a.go"},
resolve: []string{"./..."},
expDirs: []string{"."},
},
{
name: "include tests",
prepare: []string{"a/b.go", "a/b_test.go"},
resolve: []string{"./..."},
expDirs: []string{".", "a"},
expDirs: []string{"a"},
expFiles: []string{"a/b.go", "a/b_test.go"},
includeTests: true,
},
@ -167,16 +163,30 @@ func TestPathResolverCommonCases(t *testing.T) {
name: "exclude tests",
prepare: []string{"a/b.go", "a/b_test.go"},
resolve: []string{"./..."},
expDirs: []string{".", "a"},
expDirs: []string{"a"},
expFiles: []string{"a/b.go"},
},
{
name: "exclude tests except explicitly set",
prepare: []string{"a/b.go", "a/b_test.go", "a/c_test.go"},
resolve: []string{"./...", "a/c_test.go"},
expDirs: []string{".", "a"},
expDirs: []string{"a"},
expFiles: []string{"a/b.go", "a/c_test.go"},
},
{
name: "exclude dirs with no go files",
prepare: []string{"a/b.txt", "a/c/d.go"},
resolve: []string{"./..."},
expDirs: []string{"a/c"},
expFiles: []string{"a/c/d.go"},
},
{
name: "exclude dirs with no go files with root dir",
prepare: []string{"a/b.txt", "a/c/d.go", "e.go"},
resolve: []string{"./..."},
expDirs: []string{".", "a/c"},
expFiles: []string{"a/c/d.go", "e.go"},
},
}
for _, tc := range testCases {