Skip to content

Commit c176c2a

Browse files
committed
fix: guard against null deepest identifier node
1 parent 82ace49 commit c176c2a

8 files changed

+49
-3
lines changed

lib/detect-testing-library-utils.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,10 @@ export function detectTestingLibraryUtils<
477477
const isRenderVariableDeclarator: IsRenderVariableDeclaratorFn = (node) => {
478478
const initIdentifierNode = getDeepestIdentifierNode(node.init);
479479

480+
if (!initIdentifierNode) {
481+
return false;
482+
}
483+
480484
return isRenderUtil(initIdentifierNode);
481485
};
482486

lib/rules/no-await-sync-events.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ export default createTestingLibraryRule<Options, MessageIds>({
4242
'AwaitExpression > CallExpression'(node: TSESTree.CallExpression) {
4343
const simulateEventFunctionIdentifier = getDeepestIdentifierNode(node);
4444

45+
if (!simulateEventFunctionIdentifier) {
46+
return;
47+
}
48+
4549
const isSimulateEventMethod =
4650
helpers.isUserEventMethod(simulateEventFunctionIdentifier) ||
4751
helpers.isFireEventMethod(simulateEventFunctionIdentifier);

lib/rules/no-container.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ export default createTestingLibraryRule<Options, MessageIds>({
8484
return {
8585
CallExpression(node) {
8686
const callExpressionIdentifier = getDeepestIdentifierNode(node);
87+
88+
if (!callExpressionIdentifier) {
89+
return;
90+
}
91+
8792
if (helpers.isRenderUtil(callExpressionIdentifier)) {
8893
detectRenderWrapper(callExpressionIdentifier);
8994
}
@@ -103,6 +108,10 @@ export default createTestingLibraryRule<Options, MessageIds>({
103108
VariableDeclarator(node) {
104109
const initIdentifierNode = getDeepestIdentifierNode(node.init);
105110

111+
if (!initIdentifierNode) {
112+
return;
113+
}
114+
106115
const isRenderWrapperVariableDeclarator = initIdentifierNode
107116
? renderWrapperNames.includes(initIdentifierNode.name)
108117
: false;

lib/rules/no-debug.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ export default createTestingLibraryRule<Options, MessageIds>({
4848
VariableDeclarator(node) {
4949
const initIdentifierNode = getDeepestIdentifierNode(node.init);
5050

51+
if (!initIdentifierNode) {
52+
return;
53+
}
54+
5155
const isRenderWrapperVariableDeclarator = initIdentifierNode
5256
? renderWrapperNames.includes(initIdentifierNode.name)
5357
: false;
@@ -68,9 +72,11 @@ export default createTestingLibraryRule<Options, MessageIds>({
6872
ASTUtils.isIdentifier(property.key) &&
6973
property.key.name === 'debug'
7074
) {
71-
suspiciousDebugVariableNames.push(
72-
getDeepestIdentifierNode(property.value).name
73-
);
75+
const identifierNode = getDeepestIdentifierNode(property.value);
76+
77+
if (identifierNode) {
78+
suspiciousDebugVariableNames.push(identifierNode.name);
79+
}
7480
}
7581
}
7682
}
@@ -83,6 +89,11 @@ export default createTestingLibraryRule<Options, MessageIds>({
8389
},
8490
CallExpression(node) {
8591
const callExpressionIdentifier = getDeepestIdentifierNode(node);
92+
93+
if (!callExpressionIdentifier) {
94+
return;
95+
}
96+
8697
if (helpers.isRenderUtil(callExpressionIdentifier)) {
8798
detectRenderWrapper(callExpressionIdentifier);
8899
}

lib/rules/no-promise-in-fire-event.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ export default createTestingLibraryRule<Options, MessageIds>({
5252
if (isCallExpression(node)) {
5353
const domElementIdentifier = getDeepestIdentifierNode(node);
5454

55+
if (!domElementIdentifier) {
56+
return;
57+
}
58+
5559
if (
5660
helpers.isAsyncQuery(domElementIdentifier) ||
5761
isPromiseIdentifier(domElementIdentifier)

lib/rules/no-render-in-setup.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ export default createTestingLibraryRule<Options, MessageIds>({
8484
(hook) => hook !== allowTestingFrameworkSetupHook
8585
);
8686
const callExpressionIdentifier = getDeepestIdentifierNode(node);
87+
88+
if (!callExpressionIdentifier) {
89+
return;
90+
}
91+
8792
const isRenderIdentifier = helpers.isRenderUtil(
8893
callExpressionIdentifier
8994
);

lib/rules/render-result-naming-convention.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ export default createTestingLibraryRule<Options, MessageIds>({
4848
return {
4949
CallExpression(node) {
5050
const callExpressionIdentifier = getDeepestIdentifierNode(node);
51+
52+
if (!callExpressionIdentifier) {
53+
return;
54+
}
55+
5156
if (helpers.isRenderUtil(callExpressionIdentifier)) {
5257
detectRenderWrapper(callExpressionIdentifier);
5358
}

tests/lib/rules/no-debug.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ ruleTester.run(RULE_NAME, rule, {
139139
debug()
140140
`,
141141
},
142+
143+
`// cover edge case for https://github.com/testing-library/eslint-plugin-testing-library/issues/306
144+
thing.method.lastCall.args[0]();
145+
`,
142146
],
143147

144148
invalid: [

0 commit comments

Comments
 (0)