Skip to content

Commit

Permalink
Unknown linter breaks //nolint (#1497)
Browse files Browse the repository at this point in the history
* Unknown linter breaks //nolint
* Testing if nolint directive for unknown linter silences violation on the same line
  • Loading branch information
iwankgb committed Nov 9, 2020
1 parent b1755c1 commit 947dae1
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 6 deletions.
8 changes: 2 additions & 6 deletions pkg/result/processors/nolint.go
Expand Up @@ -250,14 +250,14 @@ func (p *Nolint) extractInlineRangeFromComment(text string, g ast.Node, fset *to
var linters []string
text = strings.Split(text, "//")[0] // allow another comment after this comment
linterItems := strings.Split(strings.TrimPrefix(text, "nolint:"), ",")
var gotUnknownLinters bool
for _, linter := range linterItems {
linterName := strings.ToLower(strings.TrimSpace(linter))

lcs := p.dbManager.GetLinterConfigs(linterName)
if lcs == nil {
p.unknownLintersSet[linterName] = true
gotUnknownLinters = true
linters = append(linters, linterName)
nolintDebugf("unknown linter %s on line %d", linterName, fset.Position(g.Pos()).Line)
continue
}

Expand All @@ -266,10 +266,6 @@ func (p *Nolint) extractInlineRangeFromComment(text string, g ast.Node, fset *to
}
}

if gotUnknownLinters {
return buildRange(nil) // ignore all linters to not annoy user
}

nolintDebugf("%d: linters are %s", fset.Position(g.Pos()).Line, linters)
return buildRange(linters)
}
Expand Down
22 changes: 22 additions & 0 deletions pkg/result/processors/nolint_test.go
Expand Up @@ -149,6 +149,28 @@ func TestNolintInvalidLinterName(t *testing.T) {
p.Finish()
}

func TestNolintInvalidLinterNameWithViolationOnTheSameLine(t *testing.T) {
log := getMockLog()
log.On("Warnf", "Found unknown linters in //nolint directives: %s", "foobar")
issues := []result.Issue{
{
Pos: token.Position{
Filename: filepath.Join("testdata", "nolint_apply_to_unknown.go"),
Line: 4,
},
FromLinter: "gofmt",
},
}

p := newTestNolintProcessor(log)
processedIssues, err := p.Process(issues)
p.Finish()

assert.Len(t, processedIssues, 1)
assert.Equal(t, issues, processedIssues)
assert.NoError(t, err)
}

func TestNolintAliases(t *testing.T) {
p := newTestNolintProcessor(getMockLog())
for _, line := range []int{47, 49, 51} {
Expand Down
5 changes: 5 additions & 0 deletions pkg/result/processors/testdata/nolint_apply_to_unknown.go
@@ -0,0 +1,5 @@
package testdata

func bar() {
_ = 0 //nolint: foobar
}

0 comments on commit 947dae1

Please sign in to comment.