Skip to content

Commit e8b55f8

Browse files
authored
prepareSkips: to resolve regexps in excludes (#1060)
* prepareSkips: to resolve regexps in excludes * prepareSkips: to resolve regexps in excludes * cleanup * errorf: format * doublestar/v4: latest version
1 parent fd8d99d commit e8b55f8

File tree

4 files changed

+71
-1
lines changed

4 files changed

+71
-1
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ go 1.22.1
44

55
require (
66
github.com/BurntSushi/toml v1.4.0
7+
github.com/bmatcuk/doublestar/v4 v4.8.1
78
github.com/chavacava/garif v0.1.0
89
github.com/fatih/color v1.18.0
910
github.com/fatih/structtag v1.2.0

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
22
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
3+
github.com/bmatcuk/doublestar/v4 v4.8.1 h1:54Bopc5c2cAvhLRAzqOGCYHYyhcDHsFF4wWIR5wKP38=
4+
github.com/bmatcuk/doublestar/v4 v4.8.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
35
github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc=
46
github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww=
57
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

revivelib/core.go

100644100755
Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import (
55
"fmt"
66
"log"
77
"os"
8+
"path/filepath"
89
"strings"
910

11+
"github.com/bmatcuk/doublestar/v4"
1012
"github.com/mgechev/dots"
1113
"github.com/mgechev/revive/config"
1214
"github.com/mgechev/revive/lint"
@@ -173,14 +175,42 @@ func getPackages(includePatterns []string, excludePatterns ArrayFlags) ([][]stri
173175
globs = append(globs, ".")
174176
}
175177

176-
packages, err := dots.ResolvePackages(globs, normalizeSplit(excludePatterns))
178+
globs, skips, err := prepareSkips(globs, normalizeSplit(excludePatterns))
179+
if err != nil {
180+
return nil, fmt.Errorf("prepare skips - resolving excludes before dots: %w", err)
181+
}
182+
183+
packages, err := dots.ResolvePackages(globs, skips)
177184
if err != nil {
178185
return nil, fmt.Errorf("getting packages - resolving packages in dots: %w", err)
179186
}
180187

181188
return packages, nil
182189
}
183190

191+
func prepareSkips(globs, excludes []string) ([]string, []string, error) {
192+
var skips []string
193+
for _, path := range globs {
194+
var basepath string
195+
basepath, _ = doublestar.SplitPattern(path)
196+
fsys := os.DirFS(basepath)
197+
for _, skip := range excludes {
198+
matches, err := doublestar.Glob(fsys, skip)
199+
if err != nil {
200+
return nil, nil, fmt.Errorf("Skips Error: %w", err)
201+
}
202+
for _, match := range matches {
203+
path = basepath + "/" + match
204+
// create skip only for .go files
205+
if filepath.Ext(path) == ".go" {
206+
skips = append(skips, path)
207+
}
208+
}
209+
}
210+
}
211+
return globs, skips, nil
212+
}
213+
184214
func normalizeSplit(strs []string) []string {
185215
res := []string{}
186216

revivelib/core_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,43 @@ func TestReviveLint(t *testing.T) {
3636
}
3737
}
3838

39+
func TestReviveLintExcludeWithRegexp(t *testing.T) {
40+
// ARRANGE
41+
revive := getMockRevive(t)
42+
43+
// ACT
44+
files := []string{"../testdata/if_return.go"}
45+
excludePatterns := []string{"*return*"}
46+
packages := []*revivelib.LintPattern{}
47+
for _, file := range files {
48+
packages = append(packages, revivelib.Include(file))
49+
}
50+
51+
for _, file := range excludePatterns {
52+
packages = append(packages, revivelib.Exclude(file))
53+
}
54+
55+
failures, err := revive.Lint(packages...)
56+
57+
if err != nil {
58+
t.Fatal(err)
59+
}
60+
61+
// ASSERT
62+
failureList := []lint.Failure{}
63+
64+
for failure := range failures {
65+
failureList = append(failureList, failure)
66+
}
67+
68+
const expected = 0
69+
70+
got := len(failureList)
71+
if got != expected {
72+
t.Fatalf("Expected failures to have %d failures, but it has %d.", expected, got)
73+
}
74+
}
75+
3976
func TestReviveFormat(t *testing.T) {
4077
// ARRANGE
4178
revive := getMockRevive(t)

0 commit comments

Comments
 (0)