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)
}