1package golinters
2
3import (
4	"github.com/bkielbasa/cyclop/pkg/analyzer"
5	"golang.org/x/tools/go/analysis"
6
7	"github.com/golangci/golangci-lint/pkg/config"
8	"github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
9)
10
11const cyclopName = "cyclop"
12
13func NewCyclop(settings *config.Cyclop) *goanalysis.Linter {
14	a := analyzer.NewAnalyzer()
15
16	var cfg map[string]map[string]interface{}
17	if settings != nil {
18		d := map[string]interface{}{
19			"skipTests": settings.SkipTests,
20		}
21
22		if settings.MaxComplexity != 0 {
23			d["maxComplexity"] = settings.MaxComplexity
24		}
25
26		if settings.PackageAverage != 0 {
27			d["packageAverage"] = settings.PackageAverage
28		}
29
30		cfg = map[string]map[string]interface{}{a.Name: d}
31	}
32
33	return goanalysis.NewLinter(
34		cyclopName,
35		"checks function and package cyclomatic complexity",
36		[]*analysis.Analyzer{a},
37		cfg,
38	).WithLoadMode(goanalysis.LoadModeTypesInfo)
39}
40