Skip to content

Commit 78a3d4e

Browse files
committed
fix: refactor helper functions to keep a list testing-library imports
Previously only first testing-library import was saved, now all of them are saved.
1 parent cec88fb commit 78a3d4e

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

lib/create-testing-library-rule/detect-testing-library-utils.ts

+16-12
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export type EnhancedRuleCreate<
5454

5555
// Helpers methods
5656
type GetTestingLibraryImportNodeFn = () => ImportModuleNode | null;
57+
type GetTestingLibraryImportNodesFn = () => ImportModuleNode[];
5758
type GetCustomModuleImportNodeFn = () => ImportModuleNode | null;
5859
type GetTestingLibraryImportNameFn = () => string | undefined;
5960
type GetCustomModuleImportNameFn = () => string | undefined;
@@ -95,6 +96,7 @@ type IsNodeComingFromTestingLibraryFn = (
9596

9697
export interface DetectionHelpers {
9798
getTestingLibraryImportNode: GetTestingLibraryImportNodeFn;
99+
getAllTestingLibraryImportNodes: GetTestingLibraryImportNodesFn;
98100
getCustomModuleImportNode: GetCustomModuleImportNodeFn;
99101
getTestingLibraryImportName: GetTestingLibraryImportNameFn;
100102
getCustomModuleImportName: GetCustomModuleImportNameFn;
@@ -158,7 +160,7 @@ export function detectTestingLibraryUtils<
158160
context: TestingLibraryContext<TOptions, TMessageIds>,
159161
optionsWithDefault: Readonly<TOptions>
160162
): TSESLint.RuleListener => {
161-
let importedTestingLibraryNode: ImportModuleNode | null = null;
163+
const importedTestingLibraryNodes: ImportModuleNode[] = [];
162164
let importedCustomModuleNode: ImportModuleNode | null = null;
163165
let importedUserEventLibraryNode: ImportModuleNode | null = null;
164166
let importedReactDomTestUtilsNode: ImportModuleNode | null = null;
@@ -299,15 +301,20 @@ export function detectTestingLibraryUtils<
299301

300302
// Helpers for Testing Library detection.
301303
const getTestingLibraryImportNode: GetTestingLibraryImportNodeFn = () => {
302-
return importedTestingLibraryNode;
304+
return importedTestingLibraryNodes[0];
303305
};
304306

307+
const getAllTestingLibraryImportNodes: GetTestingLibraryImportNodesFn =
308+
() => {
309+
return importedTestingLibraryNodes;
310+
};
311+
305312
const getCustomModuleImportNode: GetCustomModuleImportNodeFn = () => {
306313
return importedCustomModuleNode;
307314
};
308315

309316
const getTestingLibraryImportName: GetTestingLibraryImportNameFn = () => {
310-
return getImportModuleName(importedTestingLibraryNode);
317+
return getImportModuleName(importedTestingLibraryNodes[0]);
311318
};
312319

313320
const getCustomModuleImportName: GetCustomModuleImportNameFn = () => {
@@ -331,7 +338,7 @@ export function detectTestingLibraryUtils<
331338
isStrict = false
332339
) => {
333340
const isSomeModuleImported =
334-
!!importedTestingLibraryNode || !!importedCustomModuleNode;
341+
importedTestingLibraryNodes.length !== 0 || !!importedCustomModuleNode;
335342

336343
return (
337344
(!isStrict && isAggressiveModuleReportingEnabled()) ||
@@ -945,6 +952,7 @@ export function detectTestingLibraryUtils<
945952

946953
const helpers: DetectionHelpers = {
947954
getTestingLibraryImportNode,
955+
getAllTestingLibraryImportNodes,
948956
getCustomModuleImportNode,
949957
getTestingLibraryImportName,
950958
getCustomModuleImportName,
@@ -989,12 +997,9 @@ export function detectTestingLibraryUtils<
989997
return;
990998
}
991999
// 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-
/testing-library/g.test(node.source.value)
996-
) {
997-
importedTestingLibraryNode = node;
1000+
// to override importedTestingLibraryNodes after it's found
1001+
if (/testing-library/g.test(node.source.value)) {
1002+
importedTestingLibraryNodes.push(node);
9981003
}
9991004

10001005
// check only if custom module import not found yet so we avoid
@@ -1035,15 +1040,14 @@ export function detectTestingLibraryUtils<
10351040
const { arguments: args } = callExpression;
10361041

10371042
if (
1038-
!importedTestingLibraryNode &&
10391043
args.some(
10401044
(arg) =>
10411045
isLiteral(arg) &&
10421046
typeof arg.value === 'string' &&
10431047
/testing-library/g.test(arg.value)
10441048
)
10451049
) {
1046-
importedTestingLibraryNode = callExpression;
1050+
importedTestingLibraryNodes.push(callExpression);
10471051
}
10481052

10491053
const customModule = getCustomModule();

0 commit comments

Comments
 (0)