Skip to content

Commit 0eb6aa7

Browse files
author
golangci
authored
Merge pull request #39 from golangci/feature/skip-dirs-without-go-files-early
skip dirs without go files early: improve logs and save time
2 parents 541cd1d + 5363497 commit 0eb6aa7

File tree

2 files changed

+47
-21
lines changed

2 files changed

+47
-21
lines changed

pkg/fsutils/path_resolver.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,5 +184,21 @@ func (pr PathResolver) Resolve(paths ...string) (*PathResolveResult, error) {
184184
state.addFile(path)
185185
}
186186

187+
state.excludeDirsWithoutGoFiles()
188+
187189
return state.toResult(), nil
188190
}
191+
192+
func (s *pathResolveState) excludeDirsWithoutGoFiles() {
193+
dirToFiles := map[string]bool{}
194+
for f := range s.files {
195+
dir := filepath.Dir(f)
196+
dirToFiles[dir] = true
197+
}
198+
199+
for dir := range s.dirs {
200+
if !dirToFiles[dir] { // no go files in this dir
201+
delete(s.dirs, dir)
202+
}
203+
}
204+
}

pkg/fsutils/path_resolver_test.go

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -84,30 +84,27 @@ func TestPathResolverCommonCases(t *testing.T) {
8484
{
8585
name: "empty root recursively",
8686
resolve: []string{"./..."},
87-
expDirs: []string{"."},
8887
},
8988
{
9089
name: "empty root",
9190
resolve: []string{"./"},
92-
expDirs: []string{"."},
9391
},
9492
{
9593
name: "vendor is excluded recursively",
96-
prepare: []string{"vendor/a/"},
94+
prepare: []string{"vendor/a/b.go"},
9795
resolve: []string{"./..."},
98-
expDirs: []string{"."},
9996
},
10097
{
10198
name: "vendor is excluded",
102-
prepare: []string{"vendor/"},
99+
prepare: []string{"vendor/a.go"},
103100
resolve: []string{"./..."},
104-
expDirs: []string{"."},
105101
},
106102
{
107-
name: "vendor implicitely resolved",
108-
prepare: []string{"vendor/"},
109-
resolve: []string{"./vendor"},
110-
expDirs: []string{"vendor"},
103+
name: "vendor implicitely resolved",
104+
prepare: []string{"vendor/a.go"},
105+
resolve: []string{"./vendor"},
106+
expDirs: []string{"vendor"},
107+
expFiles: []string{"vendor/a.go"},
111108
},
112109
{
113110
name: "extensions filter recursively",
@@ -125,7 +122,7 @@ func TestPathResolverCommonCases(t *testing.T) {
125122
},
126123
{
127124
name: "one level dirs exclusion",
128-
prepare: []string{"a/b/", "a/c.go"},
125+
prepare: []string{"a/b/d.go", "a/c.go"},
129126
resolve: []string{"./a"},
130127
expDirs: []string{"a"},
131128
expFiles: []string{"a/c.go"},
@@ -138,45 +135,58 @@ func TestPathResolverCommonCases(t *testing.T) {
138135
expFiles: []string{"a/b/c.go", "a/d.txt"},
139136
},
140137
{
141-
name: ".* is always ignored",
138+
name: ".* dotfiles are always ignored",
142139
prepare: []string{".git/a.go", ".circleci/b.go"},
143140
resolve: []string{"./..."},
144-
expDirs: []string{"."},
145141
},
146142
{
147-
name: "exclude dirs on any depth level",
148-
prepare: []string{"ok/.git/a.go"},
149-
resolve: []string{"./..."},
150-
expDirs: []string{".", "ok"},
143+
name: "exclude dirs on any depth level",
144+
prepare: []string{"ok/.git/a.go", "ok/b.go"},
145+
resolve: []string{"./..."},
146+
expDirs: []string{"ok"},
147+
expFiles: []string{"ok/b.go"},
151148
},
152149
{
153150
name: "ignore _*",
154151
prepare: []string{"_any/a.go"},
155152
resolve: []string{"./..."},
156-
expDirs: []string{"."},
157153
},
158154
{
159155
name: "include tests",
160156
prepare: []string{"a/b.go", "a/b_test.go"},
161157
resolve: []string{"./..."},
162-
expDirs: []string{".", "a"},
158+
expDirs: []string{"a"},
163159
expFiles: []string{"a/b.go", "a/b_test.go"},
164160
includeTests: true,
165161
},
166162
{
167163
name: "exclude tests",
168164
prepare: []string{"a/b.go", "a/b_test.go"},
169165
resolve: []string{"./..."},
170-
expDirs: []string{".", "a"},
166+
expDirs: []string{"a"},
171167
expFiles: []string{"a/b.go"},
172168
},
173169
{
174170
name: "exclude tests except explicitly set",
175171
prepare: []string{"a/b.go", "a/b_test.go", "a/c_test.go"},
176172
resolve: []string{"./...", "a/c_test.go"},
177-
expDirs: []string{".", "a"},
173+
expDirs: []string{"a"},
178174
expFiles: []string{"a/b.go", "a/c_test.go"},
179175
},
176+
{
177+
name: "exclude dirs with no go files",
178+
prepare: []string{"a/b.txt", "a/c/d.go"},
179+
resolve: []string{"./..."},
180+
expDirs: []string{"a/c"},
181+
expFiles: []string{"a/c/d.go"},
182+
},
183+
{
184+
name: "exclude dirs with no go files with root dir",
185+
prepare: []string{"a/b.txt", "a/c/d.go", "e.go"},
186+
resolve: []string{"./..."},
187+
expDirs: []string{".", "a/c"},
188+
expFiles: []string{"a/c/d.go", "e.go"},
189+
},
180190
}
181191

182192
for _, tc := range testCases {

0 commit comments

Comments
 (0)