@@ -54,6 +54,7 @@ export type EnhancedRuleCreate<
54
54
55
55
// Helpers methods
56
56
type GetTestingLibraryImportNodeFn = ( ) => ImportModuleNode | null ;
57
+ type GetTestingLibraryImportNodesFn = ( ) => ImportModuleNode [ ] ;
57
58
type GetCustomModuleImportNodeFn = ( ) => ImportModuleNode | null ;
58
59
type GetTestingLibraryImportNameFn = ( ) => string | undefined ;
59
60
type GetCustomModuleImportNameFn = ( ) => string | undefined ;
@@ -95,6 +96,7 @@ type IsNodeComingFromTestingLibraryFn = (
95
96
96
97
export interface DetectionHelpers {
97
98
getTestingLibraryImportNode : GetTestingLibraryImportNodeFn ;
99
+ getAllTestingLibraryImportNodes : GetTestingLibraryImportNodesFn ;
98
100
getCustomModuleImportNode : GetCustomModuleImportNodeFn ;
99
101
getTestingLibraryImportName : GetTestingLibraryImportNameFn ;
100
102
getCustomModuleImportName : GetCustomModuleImportNameFn ;
@@ -158,7 +160,7 @@ export function detectTestingLibraryUtils<
158
160
context : TestingLibraryContext < TOptions , TMessageIds > ,
159
161
optionsWithDefault : Readonly < TOptions >
160
162
) : TSESLint . RuleListener => {
161
- let importedTestingLibraryNode : ImportModuleNode | null = null ;
163
+ const importedTestingLibraryNodes : ImportModuleNode [ ] = [ ] ;
162
164
let importedCustomModuleNode : ImportModuleNode | null = null ;
163
165
let importedUserEventLibraryNode : ImportModuleNode | null = null ;
164
166
let importedReactDomTestUtilsNode : ImportModuleNode | null = null ;
@@ -299,15 +301,20 @@ export function detectTestingLibraryUtils<
299
301
300
302
// Helpers for Testing Library detection.
301
303
const getTestingLibraryImportNode : GetTestingLibraryImportNodeFn = ( ) => {
302
- return importedTestingLibraryNode ;
304
+ return importedTestingLibraryNodes [ 0 ] ;
303
305
} ;
304
306
307
+ const getAllTestingLibraryImportNodes : GetTestingLibraryImportNodesFn =
308
+ ( ) => {
309
+ return importedTestingLibraryNodes ;
310
+ } ;
311
+
305
312
const getCustomModuleImportNode : GetCustomModuleImportNodeFn = ( ) => {
306
313
return importedCustomModuleNode ;
307
314
} ;
308
315
309
316
const getTestingLibraryImportName : GetTestingLibraryImportNameFn = ( ) => {
310
- return getImportModuleName ( importedTestingLibraryNode ) ;
317
+ return getImportModuleName ( importedTestingLibraryNodes [ 0 ] ) ;
311
318
} ;
312
319
313
320
const getCustomModuleImportName : GetCustomModuleImportNameFn = ( ) => {
@@ -331,7 +338,7 @@ export function detectTestingLibraryUtils<
331
338
isStrict = false
332
339
) => {
333
340
const isSomeModuleImported =
334
- ! ! importedTestingLibraryNode || ! ! importedCustomModuleNode ;
341
+ importedTestingLibraryNodes . length !== 0 || ! ! importedCustomModuleNode ;
335
342
336
343
return (
337
344
( ! isStrict && isAggressiveModuleReportingEnabled ( ) ) ||
@@ -945,6 +952,7 @@ export function detectTestingLibraryUtils<
945
952
946
953
const helpers : DetectionHelpers = {
947
954
getTestingLibraryImportNode,
955
+ getAllTestingLibraryImportNodes,
948
956
getCustomModuleImportNode,
949
957
getTestingLibraryImportName,
950
958
getCustomModuleImportName,
@@ -989,12 +997,9 @@ export function detectTestingLibraryUtils<
989
997
return ;
990
998
}
991
999
// check only if testing library import not found yet so we avoid
992
- // to override importedTestingLibraryNode after it's found
993
- if (
994
- ! importedTestingLibraryNode &&
995
- / t e s t i n g - l i b r a r y / g. test ( node . source . value )
996
- ) {
997
- importedTestingLibraryNode = node ;
1000
+ // to override importedTestingLibraryNodes after it's found
1001
+ if ( / t e s t i n g - l i b r a r y / g. test ( node . source . value ) ) {
1002
+ importedTestingLibraryNodes . push ( node ) ;
998
1003
}
999
1004
1000
1005
// check only if custom module import not found yet so we avoid
@@ -1035,15 +1040,14 @@ export function detectTestingLibraryUtils<
1035
1040
const { arguments : args } = callExpression ;
1036
1041
1037
1042
if (
1038
- ! importedTestingLibraryNode &&
1039
1043
args . some (
1040
1044
( arg ) =>
1041
1045
isLiteral ( arg ) &&
1042
1046
typeof arg . value === 'string' &&
1043
1047
/ t e s t i n g - l i b r a r y / g. test ( arg . value )
1044
1048
)
1045
1049
) {
1046
- importedTestingLibraryNode = callExpression ;
1050
+ importedTestingLibraryNodes . push ( callExpression ) ;
1047
1051
}
1048
1052
1049
1053
const customModule = getCustomModule ( ) ;
0 commit comments