@@ -148,21 +148,16 @@ func (a *analyzer) checkFunc(pass *analysis.Pass, ft *ast.FuncType, block *ast.B
148
148
return
149
149
}
150
150
151
- argName , ok := isTestFunction (ft .Params .List [0 ], testingPkgName )
152
- if ! ok {
151
+ fnInfo := checkTestFunctionSignature (ft .Params .List [0 ], testingPkgName , fnName )
152
+ if fnInfo == nil {
153
153
return
154
154
}
155
155
156
- fnInfo := FuncInfo {
157
- Name : fnName ,
158
- ArgName : argName ,
159
- }
160
-
161
156
checkStmts (a , pass , fnInfo , block .List )
162
157
}
163
158
164
159
//nolint:funlen // The complexity is expected by the number of [ast.Stmt] variants.
165
- func (a * analyzer ) checkStmt (pass * analysis.Pass , fnInfo FuncInfo , stmt ast.Stmt ) {
160
+ func (a * analyzer ) checkStmt (pass * analysis.Pass , fnInfo * FuncInfo , stmt ast.Stmt ) {
166
161
if stmt == nil {
167
162
return
168
163
}
@@ -234,7 +229,7 @@ func (a *analyzer) checkStmt(pass *analysis.Pass, fnInfo FuncInfo, stmt ast.Stmt
234
229
}
235
230
}
236
231
237
- func (a * analyzer ) checkExpr (pass * analysis.Pass , fnInfo FuncInfo , exp ast.Expr ) {
232
+ func (a * analyzer ) checkExpr (pass * analysis.Pass , fnInfo * FuncInfo , exp ast.Expr ) {
238
233
switch expr := exp .(type ) {
239
234
case * ast.BinaryExpr :
240
235
a .checkExpr (pass , fnInfo , expr .X )
@@ -268,34 +263,42 @@ func (a *analyzer) checkExpr(pass *analysis.Pass, fnInfo FuncInfo, exp ast.Expr)
268
263
}
269
264
}
270
265
271
- func checkStmts [T ast.Stmt ](a * analyzer , pass * analysis.Pass , fnInfo FuncInfo , stmts []T ) {
266
+ func checkStmts [T ast.Stmt ](a * analyzer , pass * analysis.Pass , fnInfo * FuncInfo , stmts []T ) {
272
267
for _ , stmt := range stmts {
273
268
a .checkStmt (pass , fnInfo , stmt )
274
269
}
275
270
}
276
271
277
- func checkExprs (a * analyzer , pass * analysis.Pass , fnInfo FuncInfo , exprs []ast.Expr ) {
272
+ func checkExprs (a * analyzer , pass * analysis.Pass , fnInfo * FuncInfo , exprs []ast.Expr ) {
278
273
for _ , expr := range exprs {
279
274
a .checkExpr (pass , fnInfo , expr )
280
275
}
281
276
}
282
277
283
- func isTestFunction (arg * ast.Field , pkgName string ) ( string , bool ) {
278
+ func checkTestFunctionSignature (arg * ast.Field , pkgName , fnName string ) * FuncInfo {
284
279
switch at := arg .Type .(type ) {
285
280
case * ast.StarExpr :
286
281
if se , ok := at .X .(* ast.SelectorExpr ); ok {
287
- argName := getTestArgName (arg , "<t/b>" )
288
-
289
- return argName , checkSelectorName (se , pkgName , "T" , "B" )
282
+ return createFuncInfo (arg , "<t/b>" , se , pkgName , fnName , "T" , "B" )
290
283
}
291
284
292
285
case * ast.SelectorExpr :
293
- argName := getTestArgName (arg , "tb" )
286
+ return createFuncInfo (arg , "tb" , at , pkgName , fnName , "TB" )
287
+ }
294
288
295
- return argName , checkSelectorName (at , pkgName , "TB" )
289
+ return nil
290
+ }
291
+
292
+ func createFuncInfo (arg * ast.Field , defaultName string , se * ast.SelectorExpr , pkgName , fnName string , selectorNames ... string ) * FuncInfo {
293
+ ok := checkSelectorName (se , pkgName , selectorNames ... )
294
+ if ! ok {
295
+ return nil
296
296
}
297
297
298
- return "" , false
298
+ return & FuncInfo {
299
+ Name : fnName ,
300
+ ArgName : getTestArgName (arg , defaultName ),
301
+ }
299
302
}
300
303
301
304
func checkSelectorName (se * ast.SelectorExpr , pkgName string , selectorNames ... string ) bool {
0 commit comments