Skip to content

Commit a68b411

Browse files
committed
Adding case-sensitive exclude processor
Signed-off-by: Maciej "Iwan" Iwanowski <[email protected]>
1 parent 4958e50 commit a68b411

File tree

5 files changed

+49
-4
lines changed

5 files changed

+49
-4
lines changed

pkg/commands/run.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ func initFlagSet(fs *pflag.FlagSet, cfg *config.Config, m *lintersdb.Manager, is
189189
ic := &cfg.Issues
190190
fs.StringSliceVarP(&ic.ExcludePatterns, "exclude", "e", nil, wh("Exclude issue by regexp"))
191191
fs.BoolVar(&ic.UseDefaultExcludes, "exclude-use-default", true, getDefaultIssueExcludeHelp())
192+
fs.BoolVar(&ic.ExcludeCaseSensitive, "exclude-case-sensitive", false, wh("If set to true exclude rules are case sensitive"))
192193

193194
fs.IntVar(&ic.MaxIssuesPerLinter, "max-issues-per-linter", 50,
194195
wh("Maximum issues count per one linter. Set to 0 to disable"))

pkg/config/config.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -376,9 +376,10 @@ func (e ExcludeRule) Validate() error {
376376
}
377377

378378
type Issues struct {
379-
ExcludePatterns []string `mapstructure:"exclude"`
380-
ExcludeRules []ExcludeRule `mapstructure:"exclude-rules"`
381-
UseDefaultExcludes bool `mapstructure:"exclude-use-default"`
379+
ExcludeCaseSensitive bool `mapstructure:"exclude-case-sensitive"`
380+
ExcludePatterns []string `mapstructure:"exclude"`
381+
ExcludeRules []ExcludeRule `mapstructure:"exclude-rules"`
382+
UseDefaultExcludes bool `mapstructure:"exclude-use-default"`
382383

383384
MaxIssuesPerLinter int `mapstructure:"max-issues-per-linter"`
384385
MaxSameIssues int `mapstructure:"max-same-issues"`

pkg/lint/runner.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,13 @@ func NewRunner(cfg *config.Config, log logutils.Log, goenv *goutil.Env,
4040
excludeTotalPattern = fmt.Sprintf("(%s)", strings.Join(excludePatterns, "|"))
4141
}
4242

43+
var excludeProcessor processors.Processor
44+
if cfg.Issues.ExcludeCaseSensitive {
45+
excludeProcessor = processors.NewExcludeCaseSensitive(excludeTotalPattern)
46+
} else {
47+
excludeProcessor = processors.NewExclude(excludeTotalPattern)
48+
}
49+
4350
skipFilesProcessor, err := processors.NewSkipFiles(cfg.Run.SkipFiles)
4451
if err != nil {
4552
return nil, err
@@ -81,7 +88,7 @@ func NewRunner(cfg *config.Config, log logutils.Log, goenv *goutil.Env,
8188
// Must be before exclude because users see already marked output and configure excluding by it.
8289
processors.NewIdentifierMarker(),
8390

84-
processors.NewExclude(excludeTotalPattern),
91+
excludeProcessor,
8592
processors.NewExcludeRules(excludeRules, lineCache, log.Child("exclude_rules")),
8693
processors.NewNolint(log.Child("nolint"), dbManager),
8794

pkg/result/processors/exclude.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,21 @@ func (p Exclude) Process(issues []result.Issue) ([]result.Issue, error) {
3737
}
3838

3939
func (p Exclude) Finish() {}
40+
41+
type ExcludeCaseSensitive struct {
42+
*Exclude
43+
}
44+
45+
func NewExcludeCaseSensitive(pattern string) *ExcludeCaseSensitive {
46+
var patternRe *regexp.Regexp
47+
if pattern != "" {
48+
patternRe = regexp.MustCompile(pattern)
49+
}
50+
return &ExcludeCaseSensitive{
51+
&Exclude{pattern: patternRe},
52+
}
53+
}
54+
55+
func (p ExcludeCaseSensitive) Name() string {
56+
return "exclude-case-sensitive"
57+
}

pkg/result/processors/exclude_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,21 @@ func TestExclude(t *testing.T) {
5151
func TestNoExclude(t *testing.T) {
5252
processAssertSame(t, NewExclude(""), newTextIssue("test"))
5353
}
54+
55+
func TestExcludeCaseSensitive(t *testing.T) {
56+
p := NewExcludeCaseSensitive("^exclude$")
57+
texts := []string{"excLude", "1", "", "exclud", "exclude"}
58+
var issues []result.Issue
59+
for _, t := range texts {
60+
issues = append(issues, newTextIssue(t))
61+
}
62+
63+
processedIssues := process(t, p, issues...)
64+
assert.Len(t, processedIssues, len(issues)-1)
65+
66+
var processedTexts []string
67+
for _, i := range processedIssues {
68+
processedTexts = append(processedTexts, i.Text)
69+
}
70+
assert.Equal(t, texts[:len(texts)-1], processedTexts)
71+
}

0 commit comments

Comments
 (0)