Skip to content

Commit

Permalink
error-nil: support empty and notempty error
Browse files Browse the repository at this point in the history
  • Loading branch information
mmorel-35 committed Jun 26, 2024
1 parent 8afa731 commit 073bfe6
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 2 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,10 @@ logic, but without autofix.
assert.Nil(t, err)
assert.NotNil(t, err)
assert.Empty(t, err)
assert.NotEmpty(t, err)
assert.Zero(t, err)
assert.NotZero(t, err)
assert.Equal(t, nil, err)
assert.EqualValues(t, nil, err)
assert.Exactly(t, nil, err)
Expand Down
16 changes: 16 additions & 0 deletions analyzer/testdata/src/checkers-default/error-nil/error_nil_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,14 @@ func TestErrorNilChecker(t *testing.T) {

// Invalid.
{
assert.NoError(t, err) // want "error-nil: use assert\\.NoError"
assert.NoErrorf(t, err, "msg with args %d %s", 42, "42") // want "error-nil: use assert\\.NoErrorf"
assert.Error(t, err) // want "error-nil: use assert\\.Error"
assert.Errorf(t, err, "msg with args %d %s", 42, "42") // want "error-nil: use assert\\.Errorf"
assert.NoError(t, err) // want "error-nil: use assert\\.NoError"
assert.NoErrorf(t, err, "msg with args %d %s", 42, "42") // want "error-nil: use assert\\.NoErrorf"
assert.Error(t, err) // want "error-nil: use assert\\.Error"
assert.Errorf(t, err, "msg with args %d %s", 42, "42") // want "error-nil: use assert\\.Errorf"
assert.NoError(t, err) // want "error-nil: use assert\\.NoError"
assert.NoErrorf(t, err, "msg with args %d %s", 42, "42") // want "error-nil: use assert\\.NoErrorf"
assert.Error(t, err) // want "error-nil: use assert\\.Error"
Expand Down Expand Up @@ -67,6 +75,14 @@ func TestErrorNilChecker(t *testing.T) {
assert.NotEqualf(t, err, err, "msg with args %d %s", 42, "42")
assert.NotEqual(t, nil, nil)
assert.NotEqualf(t, nil, nil, "msg with args %d %s", 42, "42")
assert.Empty(t, err.Error())
assert.Emptyf(t, err.Error(), "msg with args %d %s", 42, "42")
assert.NotEmpty(t, err.Error())
assert.NotEmptyf(t, err.Error(), "msg with args %d %s", 42, "42")
assert.Zero(t, err.Error())
assert.Zerof(t, err.Error(), "msg with args %d %s", 42, "42")
assert.NotZero(t, err.Error())
assert.NotZerof(t, err.Error(), "msg with args %d %s", 42, "42")
}
}

Expand Down
8 changes: 6 additions & 2 deletions internal/checkers/error_nil.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ import (
//
// assert.Nil(t, err)
// assert.NotNil(t, err)
// assert.Empty(t, err)
// assert.NotEmpty(t, err)
// assert.Zero(t, err)
// assert.NotZero(t, err)
// assert.Equal(t, nil, err)
// assert.EqualValues(t, nil, err)
// assert.Exactly(t, nil, err)
Expand Down Expand Up @@ -40,12 +44,12 @@ func (checker ErrorNil) Check(pass *analysis.Pass, call *CallMeta) *analysis.Dia

proposedFn, survivingArg, replacementEndPos := func() (string, ast.Expr, token.Pos) {
switch call.Fn.NameFTrimmed {
case "Nil":
case "Nil", "Empty", "Zero":
if len(call.Args) >= 1 && isError(pass, call.Args[0]) {
return noErrorFn, call.Args[0], call.Args[0].End()
}

case "NotNil":
case "NotNil", "NotEmpty", "NotZero":
if len(call.Args) >= 1 && isError(pass, call.Args[0]) {
return errorFn, call.Args[0], call.Args[0].End()
}
Expand Down
8 changes: 8 additions & 0 deletions internal/testgen/gen_error_nil.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ func (g ErrorNilTestsGenerator) TemplateData() any {
InvalidAssertions: []Assertion{
{Fn: "Nil", Argsf: "err", ReportMsgf: report, ProposedFn: "NoError"},
{Fn: "NotNil", Argsf: "err", ReportMsgf: report, ProposedFn: "Error"},
{Fn: "Empty", Argsf: "err", ReportMsgf: report, ProposedFn: "NoError"},
{Fn: "NotEmpty", Argsf: "err", ReportMsgf: report, ProposedFn: "Error"},
{Fn: "Zero", Argsf: "err", ReportMsgf: report, ProposedFn: "NoError"},
{Fn: "NotZero", Argsf: "err", ReportMsgf: report, ProposedFn: "Error"},
{Fn: "Equal", Argsf: "err, nil", ReportMsgf: report, ProposedFn: "NoError", ProposedArgsf: "err"},
{Fn: "Equal", Argsf: "nil, err", ReportMsgf: report, ProposedFn: "NoError", ProposedArgsf: "err"},
{Fn: "EqualValues", Argsf: "err, nil", ReportMsgf: report, ProposedFn: "NoError", ProposedArgsf: "err"},
Expand All @@ -76,6 +80,10 @@ func (g ErrorNilTestsGenerator) TemplateData() any {
{Fn: "Equal", Argsf: "nil, nil"},
{Fn: "NotEqual", Argsf: "err, err"},
{Fn: "NotEqual", Argsf: "nil, nil"},
{Fn: "Empty", Argsf: "err.Error()"}, // Requested by https://github.com/Antonboom/testifylint/issues/138
{Fn: "NotEmpty", Argsf: "err.Error()"}, // Requested by https://github.com/Antonboom/testifylint/issues/138
{Fn: "Zero", Argsf: "err.Error()"}, // Requested by https://github.com/Antonboom/testifylint/issues/138
{Fn: "NotZero", Argsf: "err.Error()"}, // Requested by https://github.com/Antonboom/testifylint/issues/138
},
}
}
Expand Down

0 comments on commit 073bfe6

Please sign in to comment.