golangci-lint/pkg/result/processors/max_per_file_processor.go

58 lines
1.2 KiB
Go

package processors
import "github.com/golangci/golangci-lint/pkg/result"
type MaxLinterIssuesPerFile struct{}
var _ Processor = MaxLinterIssuesPerFile{}
type fileToIssuesMap map[string][]result.Issue
func (p MaxLinterIssuesPerFile) Name() string {
return "max_issues_per_file"
}
func (p MaxLinterIssuesPerFile) makeFileToIssuesMap(res result.Result) fileToIssuesMap {
fti := fileToIssuesMap{}
for _, i := range res.Issues {
fti[i.File] = append(fti[i.File], i)
}
return fti
}
func (p MaxLinterIssuesPerFile) processResult(res result.Result) result.Result {
if len(res.Issues) == 0 {
return res
}
if res.MaxIssuesPerFile == 0 {
return res // Nothing to process
}
fti := p.makeFileToIssuesMap(res)
for file, fileIssues := range fti {
if len(fileIssues) > res.MaxIssuesPerFile {
fti[file] = fileIssues[:res.MaxIssuesPerFile]
}
}
filteredIssues := []result.Issue{}
for _, issues := range fti {
filteredIssues = append(filteredIssues, issues...)
}
res.Issues = filteredIssues
return res
}
func (p MaxLinterIssuesPerFile) Process(results []result.Result) ([]result.Result, error) {
newResults := []result.Result{}
for _, res := range results {
newResults = append(newResults, p.processResult(res))
}
return newResults, nil
}