github.com/vanstinator/golangci-lint@v0.0.0-20240223191551-cc572f00d9d1/pkg/result/processors/max_from_linter.go (about) 1 package processors 2 3 import ( 4 "github.com/vanstinator/golangci-lint/pkg/config" 5 "github.com/vanstinator/golangci-lint/pkg/logutils" 6 "github.com/vanstinator/golangci-lint/pkg/result" 7 ) 8 9 type MaxFromLinter struct { 10 lc linterToCountMap 11 limit int 12 log logutils.Log 13 cfg *config.Config 14 } 15 16 var _ Processor = &MaxFromLinter{} 17 18 func NewMaxFromLinter(limit int, log logutils.Log, cfg *config.Config) *MaxFromLinter { 19 return &MaxFromLinter{ 20 lc: linterToCountMap{}, 21 limit: limit, 22 log: log, 23 cfg: cfg, 24 } 25 } 26 27 func (p *MaxFromLinter) Name() string { 28 return "max_from_linter" 29 } 30 31 func (p *MaxFromLinter) Process(issues []result.Issue) ([]result.Issue, error) { 32 if p.limit <= 0 { // no limit 33 return issues, nil 34 } 35 36 return filterIssues(issues, func(i *result.Issue) bool { 37 if i.Replacement != nil && p.cfg.Issues.NeedFix { 38 // we need to fix all issues at once => we need to return all of them 39 return true 40 } 41 42 p.lc[i.FromLinter]++ // always inc for stat 43 return p.lc[i.FromLinter] <= p.limit 44 }), nil 45 } 46 47 func (p *MaxFromLinter) Finish() { 48 walkStringToIntMapSortedByValue(p.lc, func(linter string, count int) { 49 if count > p.limit { 50 p.log.Infof("%d/%d issues from linter %s were hidden, use --max-issues-per-linter", 51 count-p.limit, count, linter) 52 } 53 }) 54 }