Unknown linter breaks //nolint (#1497)

* Unknown linter breaks //nolint
* Testing if nolint directive for unknown linter silences violation on the same line
This commit is contained in:
iwankgb 2020-11-09 09:33:24 +01:00 committed by GitHub
parent b1755c16ea
commit 947dae101e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 6 deletions

View File

@ -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
}
@ -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)
}

View File

@ -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} {

View File

@ -0,0 +1,5 @@
package testdata
func bar() {
_ = 0 //nolint: foobar
}