1package processors
2
3import (
4	"fmt"
5	"regexp"
6
7	"github.com/golangci/golangci-lint/pkg/result"
8)
9
10type SkipFiles struct {
11	patterns []*regexp.Regexp
12}
13
14var _ Processor = SkipFiles{}
15
16func NewSkipFiles(patterns []string) (*SkipFiles, error) {
17	var patternsRe []*regexp.Regexp
18	for _, p := range patterns {
19		p = normalizePathInRegex(p)
20		patternRe, err := regexp.Compile(p)
21		if err != nil {
22			return nil, fmt.Errorf("can't compile regexp %q: %s", p, err)
23		}
24		patternsRe = append(patternsRe, patternRe)
25	}
26
27	return &SkipFiles{
28		patterns: patternsRe,
29	}, nil
30}
31
32func (p SkipFiles) Name() string {
33	return "skip_files"
34}
35
36func (p SkipFiles) Process(issues []result.Issue) ([]result.Issue, error) {
37	if len(p.patterns) == 0 {
38		return issues, nil
39	}
40
41	return filterIssues(issues, func(i *result.Issue) bool {
42		for _, p := range p.patterns {
43			if p.MatchString(i.FilePath()) {
44				return false
45			}
46		}
47
48		return true
49	}), nil
50}
51
52func (p SkipFiles) Finish() {}
53