github.com/chenfeining/golangci-lint@v1.0.2-0.20230730162517-14c6c67868df/pkg/result/processors/max_per_file_from_linter.go (about) 1 package processors 2 3 import ( 4 "github.com/chenfeining/golangci-lint/pkg/config" 5 "github.com/chenfeining/golangci-lint/pkg/result" 6 ) 7 8 type linterToCountMap map[string]int 9 type fileToLinterToCountMap map[string]linterToCountMap 10 11 type MaxPerFileFromLinter struct { 12 flc fileToLinterToCountMap 13 maxPerFileFromLinterConfig map[string]int 14 } 15 16 var _ Processor = &MaxPerFileFromLinter{} 17 18 func NewMaxPerFileFromLinter(cfg *config.Config) *MaxPerFileFromLinter { 19 maxPerFileFromLinterConfig := map[string]int{} 20 21 if !cfg.Issues.NeedFix { 22 // if we don't fix we do this limiting to not annoy user; 23 // otherwise we need to fix all issues in the file at once 24 maxPerFileFromLinterConfig["gofmt"] = 1 25 maxPerFileFromLinterConfig["goimports"] = 1 26 } 27 28 return &MaxPerFileFromLinter{ 29 flc: fileToLinterToCountMap{}, 30 maxPerFileFromLinterConfig: maxPerFileFromLinterConfig, 31 } 32 } 33 34 func (p *MaxPerFileFromLinter) Name() string { 35 return "max_per_file_from_linter" 36 } 37 38 func (p *MaxPerFileFromLinter) Process(issues []result.Issue) ([]result.Issue, error) { 39 return filterIssues(issues, func(i *result.Issue) bool { 40 limit := p.maxPerFileFromLinterConfig[i.FromLinter] 41 if limit == 0 { 42 return true 43 } 44 45 lm := p.flc[i.FilePath()] 46 if lm == nil { 47 p.flc[i.FilePath()] = linterToCountMap{} 48 } 49 count := p.flc[i.FilePath()][i.FromLinter] 50 if count >= limit { 51 return false 52 } 53 54 p.flc[i.FilePath()][i.FromLinter]++ 55 return true 56 }), nil 57 } 58 59 func (p *MaxPerFileFromLinter) Finish() {}