mirror of
https://github.com/mgechev/revive.git
synced 2025-11-27 22:18:41 +02:00
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
This commit is contained in:
committed by
GitHub
parent
fd8d99d716
commit
e8b55f8917
1
go.mod
1
go.mod
@@ -4,6 +4,7 @@ go 1.22.1
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/BurntSushi/toml v1.4.0
|
github.com/BurntSushi/toml v1.4.0
|
||||||
|
github.com/bmatcuk/doublestar/v4 v4.8.1
|
||||||
github.com/chavacava/garif v0.1.0
|
github.com/chavacava/garif v0.1.0
|
||||||
github.com/fatih/color v1.18.0
|
github.com/fatih/color v1.18.0
|
||||||
github.com/fatih/structtag v1.2.0
|
github.com/fatih/structtag v1.2.0
|
||||||
|
|||||||
2
go.sum
2
go.sum
@@ -1,5 +1,7 @@
|
|||||||
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
|
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
|
||||||
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||||
|
github.com/bmatcuk/doublestar/v4 v4.8.1 h1:54Bopc5c2cAvhLRAzqOGCYHYyhcDHsFF4wWIR5wKP38=
|
||||||
|
github.com/bmatcuk/doublestar/v4 v4.8.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
|
||||||
github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc=
|
github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc=
|
||||||
github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww=
|
github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
|||||||
32
revivelib/core.go
Normal file → Executable file
32
revivelib/core.go
Normal file → Executable file
@@ -5,8 +5,10 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/bmatcuk/doublestar/v4"
|
||||||
"github.com/mgechev/dots"
|
"github.com/mgechev/dots"
|
||||||
"github.com/mgechev/revive/config"
|
"github.com/mgechev/revive/config"
|
||||||
"github.com/mgechev/revive/lint"
|
"github.com/mgechev/revive/lint"
|
||||||
@@ -173,7 +175,12 @@ func getPackages(includePatterns []string, excludePatterns ArrayFlags) ([][]stri
|
|||||||
globs = append(globs, ".")
|
globs = append(globs, ".")
|
||||||
}
|
}
|
||||||
|
|
||||||
packages, err := dots.ResolvePackages(globs, normalizeSplit(excludePatterns))
|
globs, skips, err := prepareSkips(globs, normalizeSplit(excludePatterns))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("prepare skips - resolving excludes before dots: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
packages, err := dots.ResolvePackages(globs, skips)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("getting packages - resolving packages in dots: %w", err)
|
return nil, fmt.Errorf("getting packages - resolving packages in dots: %w", err)
|
||||||
}
|
}
|
||||||
@@ -181,6 +188,29 @@ func getPackages(includePatterns []string, excludePatterns ArrayFlags) ([][]stri
|
|||||||
return packages, nil
|
return packages, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func prepareSkips(globs, excludes []string) ([]string, []string, error) {
|
||||||
|
var skips []string
|
||||||
|
for _, path := range globs {
|
||||||
|
var basepath string
|
||||||
|
basepath, _ = doublestar.SplitPattern(path)
|
||||||
|
fsys := os.DirFS(basepath)
|
||||||
|
for _, skip := range excludes {
|
||||||
|
matches, err := doublestar.Glob(fsys, skip)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, fmt.Errorf("Skips Error: %w", err)
|
||||||
|
}
|
||||||
|
for _, match := range matches {
|
||||||
|
path = basepath + "/" + match
|
||||||
|
// create skip only for .go files
|
||||||
|
if filepath.Ext(path) == ".go" {
|
||||||
|
skips = append(skips, path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return globs, skips, nil
|
||||||
|
}
|
||||||
|
|
||||||
func normalizeSplit(strs []string) []string {
|
func normalizeSplit(strs []string) []string {
|
||||||
res := []string{}
|
res := []string{}
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,43 @@ func TestReviveLint(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReviveLintExcludeWithRegexp(t *testing.T) {
|
||||||
|
// ARRANGE
|
||||||
|
revive := getMockRevive(t)
|
||||||
|
|
||||||
|
// ACT
|
||||||
|
files := []string{"../testdata/if_return.go"}
|
||||||
|
excludePatterns := []string{"*return*"}
|
||||||
|
packages := []*revivelib.LintPattern{}
|
||||||
|
for _, file := range files {
|
||||||
|
packages = append(packages, revivelib.Include(file))
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, file := range excludePatterns {
|
||||||
|
packages = append(packages, revivelib.Exclude(file))
|
||||||
|
}
|
||||||
|
|
||||||
|
failures, err := revive.Lint(packages...)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ASSERT
|
||||||
|
failureList := []lint.Failure{}
|
||||||
|
|
||||||
|
for failure := range failures {
|
||||||
|
failureList = append(failureList, failure)
|
||||||
|
}
|
||||||
|
|
||||||
|
const expected = 0
|
||||||
|
|
||||||
|
got := len(failureList)
|
||||||
|
if got != expected {
|
||||||
|
t.Fatalf("Expected failures to have %d failures, but it has %d.", expected, got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestReviveFormat(t *testing.T) {
|
func TestReviveFormat(t *testing.T) {
|
||||||
// ARRANGE
|
// ARRANGE
|
||||||
revive := getMockRevive(t)
|
revive := getMockRevive(t)
|
||||||
|
|||||||
Reference in New Issue
Block a user