Skip to content

Commit 639ce85

Browse files
authored
formatter: support non-string single arg (#200)
1 parent 8ca1d1a commit 639ce85

File tree

10 files changed

+72
-27
lines changed

10 files changed

+72
-27
lines changed

analyzer/testdata/src/checkers-default/blank-import/blank_import_test.go

Lines changed: 37 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

analyzer/testdata/src/checkers-default/formatter/formatter_test.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

analyzer/testdata/src/checkers-default/formatter/formatter_test.go.golden

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,7 @@ func TestFormatterChecker_AllAssertions(t *testing.T) {
363363
}
364364

365365
func TestFormatterChecker_Ignored(t *testing.T) {
366+
assert.Equal(nil, nil, new(time.Time))
366367
assert.ObjectsAreEqual(nil, nil)
367368
assert.ObjectsAreEqualValues(nil, nil)
368369
assert.ObjectsExportedFieldsAreEqual(nil, nil)

analyzer/testdata/src/checkers-default/suite-dont-use-pkg/suite_dont_use_pkg_test.go

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package debug
2+
3+
import (
4+
"net/http"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestFormatter(t *testing.T) {
11+
assert.False(t, true)
12+
assert.False(t, true, new(http.Response))
13+
// assert.False(t, true, new(http.Response), 1, 2, 3) // panic
14+
assert.False(t, true, "hello")
15+
assert.False(t, true, "hello", 1, 2)
16+
assert.False(t, true, "hello_%v_%d", 3, 4)
17+
assert.Falsef(t, true, "world")
18+
assert.Falsef(t, true, "world_%d_%v", 5, 6)
19+
}

analyzer/testdata/src/formatter-not-defaults/formatter_not_defaults_test.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

analyzer/testdata/src/formatter-not-defaults/formatter_not_defaults_test.go.golden

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ func TestFormatterChecker(t *testing.T) {
1515
var args []any
1616
assert.Errorf(t, err, "Parse(%v) should fail.", args) // want "formatter: use assert\\.Errorf$"
1717
assert.Equal(t, 1, 2)
18+
assert.Equal(t, 1, 2, new(time.Time))
1819
assert.Equalf(t, 1, 2, "msg") // want "formatter: use assert\\.Equalf"
1920
assert.Equalf(t, 1, 2, "msg with arg %d", 42) // want "formatter: use assert\\.Equalf"
2021
assert.Equalf(t, 1, 2, "msg with args %d %s", 42, "42") // want "formatter: use assert\\.Equalf"

internal/checkers/formatter.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,15 +115,19 @@ func (checker Formatter) checkFmtAssertion(pass *analysis.Pass, call *CallMeta)
115115

116116
func isPrintfLikeCall(pass *analysis.Pass, call *CallMeta) (int, bool) {
117117
msgAndArgsPos := getMsgAndArgsPosition(call.Fn.Signature)
118-
if msgAndArgsPos < 0 {
118+
if msgAndArgsPos <= 0 {
119+
return -1, false
120+
}
121+
122+
if !(len(call.ArgsRaw) > msgAndArgsPos && hasStringType(pass, call.ArgsRaw[msgAndArgsPos])) {
119123
return -1, false
120124
}
121125

122126
if !assertHasFormattedAnalogue(pass, call) {
123127
return -1, false
124128
}
125129

126-
return msgAndArgsPos, len(call.ArgsRaw) > msgAndArgsPos
130+
return msgAndArgsPos, true
127131
}
128132

129133
func assertHasFormattedAnalogue(pass *analysis.Pass, call *CallMeta) bool {

internal/testgen/gen_formatter.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ func (g FormatterTestsGenerator) TemplateData() any {
114114
SprintfAssertions: sprintfAssertions,
115115
AllAssertions: assertions,
116116
IgnoredAssertions: []Assertion{
117+
{Fn: "Equal", Argsf: "nil, nil, new(time.Time)"},
117118
{Fn: "ObjectsAreEqual", Argsf: "nil, nil"},
118119
{Fn: "ObjectsAreEqualValues", Argsf: "nil, nil"},
119120
{Fn: "ObjectsExportedFieldsAreEqual", Argsf: "nil, nil"},

internal/testgen/gen_formatter_not_defaults.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ func (g FormatterNotDefaultsTestsGenerator) TemplateData() any {
1919

2020
baseAssertions := []Assertion{
2121
{Fn: "Equal", Argsf: "1, 2"},
22+
{Fn: "Equal", Argsf: "1, 2, new(time.Time)"},
23+
// {Fn: "Equal", Argsf: "1, 2, new(time.Time), 2"}, // Panics.
2224
{Fn: "Equal", Argsf: `1, 2, "msg"`, ReportMsgf: reportUse, ProposedFn: "Equalf"},
2325
{Fn: "Equal", Argsf: `1, 2, "msg with arg %d", 42`, ReportMsgf: reportUse, ProposedFn: "Equalf"},
2426
{Fn: "Equal", Argsf: `1, 2, "msg with args %d %s", 42, "42"`, ReportMsgf: reportUse, ProposedFn: "Equalf"},

0 commit comments

Comments
 (0)