2023-06-02 10:28:12 +02:00

47 lines
1.1 KiB
Go

package golinters
import (
"github.com/golangci/depguard/v2"
"golang.org/x/tools/go/analysis"
"github.com/golangci/golangci-lint/pkg/config"
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
)
func NewDepguard(settings *config.DepGuardSettings) *goanalysis.Linter {
conf := depguard.LinterSettings{}
if settings != nil {
for s, rule := range settings.Rules {
list := &depguard.List{
Files: rule.Files,
Allow: rule.Allow,
}
// because of bug with Viper parsing (split on dot) we use a list of struct instead of a map.
// https://github.com/spf13/viper/issues/324
// https://github.com/golangci/golangci-lint/issues/3749#issuecomment-1492536630
deny := map[string]string{}
for _, r := range rule.Deny {
deny[r.Pkg] = r.Desc
}
list.Deny = deny
conf[s] = list
}
}
a, err := depguard.NewAnalyzer(&conf)
if err != nil {
linterLogger.Fatalf("depguard: create analyzer: %v", err)
}
return goanalysis.NewLinter(
a.Name,
a.Doc,
[]*analysis.Analyzer{a},
nil,
).WithLoadMode(goanalysis.LoadModeSyntax)
}