51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package golinters
|
|
|
|
import (
|
|
"github.com/OpenPeeDeeP/depguard/v2"
|
|
"golang.org/x/tools/go/analysis"
|
|
|
|
"github.com/golangci/golangci-lint/pkg/config"
|
|
"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
|
|
"github.com/golangci/golangci-lint/pkg/lint/linter"
|
|
)
|
|
|
|
func NewDepguard(settings *config.DepGuardSettings) *goanalysis.Linter {
|
|
conf := depguard.LinterSettings{}
|
|
|
|
if settings != nil {
|
|
for s, rule := range settings.Rules {
|
|
list := &depguard.List{
|
|
ListMode: rule.ListMode,
|
|
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 := depguard.NewUncompiledAnalyzer(&conf)
|
|
|
|
return goanalysis.NewLinter(
|
|
a.Analyzer.Name,
|
|
a.Analyzer.Doc,
|
|
[]*analysis.Analyzer{a.Analyzer},
|
|
nil,
|
|
).WithContextSetter(func(lintCtx *linter.Context) {
|
|
err := a.Compile()
|
|
if err != nil {
|
|
lintCtx.Log.Errorf("create analyzer: %v", err)
|
|
}
|
|
}).WithLoadMode(goanalysis.LoadModeSyntax)
|
|
}
|