62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package mnd
|
|
|
|
import (
|
|
mnd "github.com/tommy-muehle/go-mnd/v2"
|
|
"golang.org/x/tools/go/analysis"
|
|
|
|
"github.com/golangci/golangci-lint/pkg/config"
|
|
"github.com/golangci/golangci-lint/pkg/goanalysis"
|
|
)
|
|
|
|
func New(settings *config.MndSettings) *goanalysis.Linter {
|
|
return newMND(mnd.Analyzer, settings, nil)
|
|
}
|
|
|
|
func NewGoMND(settings *config.GoMndSettings) *goanalysis.Linter {
|
|
// shallow copy because mnd.Analyzer is a global variable.
|
|
a := new(analysis.Analyzer)
|
|
*a = *mnd.Analyzer
|
|
|
|
// Used to force the analyzer name to use the same name as the linter.
|
|
// This is required to avoid displaying the analyzer name inside the issue text.
|
|
a.Name = "gomnd"
|
|
|
|
var linterCfg map[string]map[string]any
|
|
|
|
if settings != nil && len(settings.Settings) > 0 {
|
|
// Convert deprecated setting.
|
|
linterCfg = settings.Settings
|
|
}
|
|
|
|
return newMND(a, &settings.MndSettings, linterCfg)
|
|
}
|
|
|
|
func newMND(a *analysis.Analyzer, settings *config.MndSettings, linterCfg map[string]map[string]any) *goanalysis.Linter {
|
|
if len(linterCfg) == 0 && settings != nil {
|
|
cfg := make(map[string]any)
|
|
if len(settings.Checks) > 0 {
|
|
cfg["checks"] = settings.Checks
|
|
}
|
|
if len(settings.IgnoredNumbers) > 0 {
|
|
cfg["ignored-numbers"] = settings.IgnoredNumbers
|
|
}
|
|
if len(settings.IgnoredFiles) > 0 {
|
|
cfg["ignored-files"] = settings.IgnoredFiles
|
|
}
|
|
if len(settings.IgnoredFunctions) > 0 {
|
|
cfg["ignored-functions"] = settings.IgnoredFunctions
|
|
}
|
|
|
|
linterCfg = map[string]map[string]any{
|
|
a.Name: cfg,
|
|
}
|
|
}
|
|
|
|
return goanalysis.NewLinter(
|
|
a.Name,
|
|
"An analyzer to detect magic numbers.",
|
|
[]*analysis.Analyzer{a},
|
|
linterCfg,
|
|
).WithLoadMode(goanalysis.LoadModeSyntax)
|
|
}
|