diff --git a/README.md b/README.md index 9866dbba..5c40cd23 100644 --- a/README.md +++ b/README.md @@ -234,6 +234,7 @@ assert.NotEqual(t, 0, len(arr)) assert.NotEqualValues(t, 0, len(arr)) assert.Less(t, 0, len(arr)) assert.Greater(t, len(arr), 0) +assert.Positive(t, len(arr)) assert.NotZero(t, len(arr)) assert.NotEmpty(t, len(arr)) diff --git a/analyzer/testdata/src/checkers-default/empty/empty_test.go b/analyzer/testdata/src/checkers-default/empty/empty_test.go index cdca4f84..d20e16a8 100644 --- a/analyzer/testdata/src/checkers-default/empty/empty_test.go +++ b/analyzer/testdata/src/checkers-default/empty/empty_test.go @@ -65,10 +65,12 @@ func TestEmptyChecker(t *testing.T) { assert.NotEqualValuesf(t, len(elems), 0, "msg with args %d %s", 42, "42") // want "empty: use assert\\.NotEmptyf" assert.NotEqualValues(t, 0, len(elems)) // want "empty: use assert\\.NotEmpty" assert.NotEqualValuesf(t, 0, len(elems), "msg with args %d %s", 42, "42") // want "empty: use assert\\.NotEmptyf" - assert.Greater(t, len(elems), 0) // want "empty: use assert\\.NotEmpty" - assert.Greaterf(t, len(elems), 0, "msg with args %d %s", 42, "42") // want "empty: use assert\\.NotEmptyf" assert.Less(t, 0, len(elems)) // want "empty: use assert\\.NotEmpty" assert.Lessf(t, 0, len(elems), "msg with args %d %s", 42, "42") // want "empty: use assert\\.NotEmptyf" + assert.Greater(t, len(elems), 0) // want "empty: use assert\\.NotEmpty" + assert.Greaterf(t, len(elems), 0, "msg with args %d %s", 42, "42") // want "empty: use assert\\.NotEmptyf" + assert.Positive(t, len(elems)) // want "empty: use assert\\.NotEmpty" + assert.Positivef(t, len(elems), "msg with args %d %s", 42, "42") // want "empty: use assert\\.NotEmptyf" assert.NotZero(t, len(elems)) // want "empty: use assert\\.NotEmpty" assert.NotZerof(t, len(elems), "msg with args %d %s", 42, "42") // want "empty: use assert\\.NotEmptyf" assert.NotEmpty(t, len(elems)) // want "empty: use assert\\.NotEmpty" diff --git a/analyzer/testdata/src/checkers-default/empty/empty_test.go.golden b/analyzer/testdata/src/checkers-default/empty/empty_test.go.golden index 574e3577..e6eb42ce 100644 --- a/analyzer/testdata/src/checkers-default/empty/empty_test.go.golden +++ b/analyzer/testdata/src/checkers-default/empty/empty_test.go.golden @@ -73,6 +73,8 @@ func TestEmptyChecker(t *testing.T) { assert.NotEmptyf(t, elems, "msg with args %d %s", 42, "42") // want "empty: use assert\\.NotEmptyf" assert.NotEmpty(t, elems) // want "empty: use assert\\.NotEmpty" assert.NotEmptyf(t, elems, "msg with args %d %s", 42, "42") // want "empty: use assert\\.NotEmptyf" + assert.NotEmpty(t, elems) // want "empty: use assert\\.NotEmpty" + assert.NotEmptyf(t, elems, "msg with args %d %s", 42, "42") // want "empty: use assert\\.NotEmptyf" // Valid. assert.NotEmpty(t, elems) diff --git a/internal/checkers/empty.go b/internal/checkers/empty.go index 79eb432e..eafecb67 100644 --- a/internal/checkers/empty.go +++ b/internal/checkers/empty.go @@ -28,6 +28,7 @@ import ( // assert.NotEqualValues(t, 0, len(arr)) // assert.Less(t, 0, len(arr)) // assert.Greater(t, len(arr), 0) +// assert.Positive(t, len(arr)) // assert.NotZero(t, len(arr)) // assert.NotEmpty(t, len(arr)) // @@ -133,7 +134,7 @@ func (checker Empty) checkNotEmpty(pass *analysis.Pass, call *CallMeta) *analysi a := call.Args[0] switch call.Fn.NameFTrimmed { - case "NotZero", "NotEmpty": + case "NotZero", "NotEmpty", "Positive": lenArg, ok := isBuiltinLenCall(pass, a) if ok { return newUseNotEmptyDiagnostic(a.Pos(), a.End(), lenArg) diff --git a/internal/testgen/gen_empty.go b/internal/testgen/gen_empty.go index 3088a5f8..0d1b89e8 100644 --- a/internal/testgen/gen_empty.go +++ b/internal/testgen/gen_empty.go @@ -84,8 +84,9 @@ func (g EmptyTestsGenerator) TemplateData() any { {Fn: "NotEqual", Argsf: "0, len(elems)", ReportMsgf: report, ProposedFn: "NotEmpty", ProposedArgsf: "elems"}, {Fn: "NotEqualValues", Argsf: "len(elems), 0", ReportMsgf: report, ProposedFn: "NotEmpty", ProposedArgsf: "elems"}, {Fn: "NotEqualValues", Argsf: "0, len(elems)", ReportMsgf: report, ProposedFn: "NotEmpty", ProposedArgsf: "elems"}, - {Fn: "Greater", Argsf: "len(elems), 0", ReportMsgf: report, ProposedFn: "NotEmpty", ProposedArgsf: "elems"}, {Fn: "Less", Argsf: "0, len(elems)", ReportMsgf: report, ProposedFn: "NotEmpty", ProposedArgsf: "elems"}, + {Fn: "Greater", Argsf: "len(elems), 0", ReportMsgf: report, ProposedFn: "NotEmpty", ProposedArgsf: "elems"}, + {Fn: "Positive", Argsf: "len(elems)", ReportMsgf: report, ProposedFn: "NotEmpty", ProposedArgsf: "elems"}, {Fn: "NotZero", Argsf: "len(elems)", ReportMsgf: report, ProposedFn: "NotEmpty", ProposedArgsf: "elems"}, {Fn: "NotEmpty", Argsf: "len(elems)", ReportMsgf: report, ProposedFn: "NotEmpty", ProposedArgsf: "elems"}, },