aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/maratori
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/maratori')
-rw-r--r--vendor/github.com/maratori/testpackage/pkg/testpackage/testpackage.go40
1 files changed, 30 insertions, 10 deletions
diff --git a/vendor/github.com/maratori/testpackage/pkg/testpackage/testpackage.go b/vendor/github.com/maratori/testpackage/pkg/testpackage/testpackage.go
index cad24e1a5..2e0572972 100644
--- a/vendor/github.com/maratori/testpackage/pkg/testpackage/testpackage.go
+++ b/vendor/github.com/maratori/testpackage/pkg/testpackage/testpackage.go
@@ -5,6 +5,8 @@ import (
"regexp"
"strings"
+ "go/ast"
+
"golang.org/x/tools/go/analysis"
)
@@ -14,20 +16,43 @@ const (
SkipRegexpFlagDefault = `(export|internal)_test\.go`
)
-// NewAnalyzer returns Analyzer that makes you use a separate _test package
+const (
+ AllowPackagesFlagName = "allow-packages"
+ AllowPackagesFlagUsage = `comma separated list of packages that don't end with _test that tests are allowed to be in`
+ AllowPackagesFlagDefault = `main`
+)
+
+func processTestFile(pass *analysis.Pass, f *ast.File, allowedPackages []string) {
+ packageName := f.Name.Name
+
+ for _, p := range allowedPackages {
+ if p == packageName {
+ return
+ }
+ }
+
+ if !strings.HasSuffix(packageName, "_test") {
+ pass.Reportf(f.Name.Pos(), "package should be `%s_test` instead of `%s`", packageName, packageName)
+ }
+}
+
+// NewAnalyzer returns Analyzer that makes you use a separate _test package.
func NewAnalyzer() *analysis.Analyzer {
var (
- skipFileRegexp = SkipRegexpFlagDefault
- fs flag.FlagSet
+ skipFileRegexp = SkipRegexpFlagDefault
+ allowPackagesStr = AllowPackagesFlagDefault
+ fs flag.FlagSet
)
fs.StringVar(&skipFileRegexp, SkipRegexpFlagName, skipFileRegexp, SkipRegexpFlagUsage)
+ fs.StringVar(&allowPackagesStr, AllowPackagesFlagName, allowPackagesStr, AllowPackagesFlagUsage)
return &analysis.Analyzer{
Name: "testpackage",
Doc: "linter that makes you use a separate _test package",
Flags: fs,
Run: func(pass *analysis.Pass) (interface{}, error) {
+ allowedPackages := strings.Split(allowPackagesStr, ",")
skipFile, err := regexp.Compile(skipFileRegexp)
if err != nil {
return nil, err
@@ -35,16 +60,11 @@ func NewAnalyzer() *analysis.Analyzer {
for _, f := range pass.Files {
fileName := pass.Fset.Position(f.Pos()).Filename
- if skipFile.MatchString(fileName) {
+ if !strings.HasSuffix(fileName, "_test.go") || skipFile.MatchString(fileName) {
continue
}
- if strings.HasSuffix(fileName, "_test.go") {
- packageName := f.Name.Name
- if !strings.HasSuffix(packageName, "_test") {
- pass.Reportf(f.Name.Pos(), "package should be `%s_test` instead of `%s`", packageName, packageName)
- }
- }
+ processTestFile(pass, f, allowedPackages)
}
return nil, nil