Skip to content

Commit 83f27d8

Browse files
committed
fix: guard against null property identifier node
1 parent c176c2a commit 83f27d8

7 files changed

+36
-3
lines changed

lib/detect-testing-library-utils.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,11 @@ export function detectTestingLibraryUtils<
160160

161161
const referenceNode = getReferenceNode(node);
162162
const referenceNodeIdentifier = getPropertyIdentifierNode(referenceNode);
163+
164+
if (!referenceNodeIdentifier) {
165+
return false;
166+
}
167+
163168
const importedUtilSpecifier = getImportedUtilSpecifier(
164169
referenceNodeIdentifier
165170
);
@@ -609,7 +614,11 @@ export function detectTestingLibraryUtils<
609614
node: TSESTree.MemberExpression | TSESTree.Identifier
610615
): TSESTree.ImportClause | TSESTree.Identifier | undefined => {
611616
const identifierName: string | undefined = getPropertyIdentifierNode(node)
612-
.name;
617+
?.name;
618+
619+
if (!identifierName) {
620+
return undefined;
621+
}
613622

614623
return findImportedUtilSpecifier(identifierName);
615624
};
@@ -637,7 +646,11 @@ export function detectTestingLibraryUtils<
637646
}
638647

639648
const identifierName: string | undefined = getPropertyIdentifierNode(node)
640-
.name;
649+
?.name;
650+
651+
if (!identifierName) {
652+
return false;
653+
}
641654

642655
return hasImportMatch(importNode, identifierName);
643656
};

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export default createTestingLibraryRule<Options, MessageIds>({
8181
messageId: 'noAwaitSyncEvents',
8282
data: {
8383
name: `${
84-
getPropertyIdentifierNode(node).name
84+
getPropertyIdentifierNode(node)?.name
8585
}.${simulateEventFunctionName}`,
8686
},
8787
});

lib/rules/no-debug.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ export default createTestingLibraryRule<Options, MessageIds>({
101101
const referenceNode = getReferenceNode(node);
102102
const referenceIdentifier = getPropertyIdentifierNode(referenceNode);
103103

104+
if (!referenceIdentifier) {
105+
return;
106+
}
107+
104108
const isDebugUtil = helpers.isDebugUtil(callExpressionIdentifier);
105109
const isDeclaredDebugVariable = suspiciousDebugVariableNames.includes(
106110
callExpressionIdentifier.name

lib/rules/no-wait-for-empty-callback.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ export default createTestingLibraryRule<Options, MessageIds>({
3535
const parentCallExpression = node.parent as TSESTree.CallExpression;
3636
const parentIdentifier = getPropertyIdentifierNode(parentCallExpression);
3737

38+
if (!parentIdentifier) {
39+
return false;
40+
}
41+
3842
return helpers.isAsyncUtil(parentIdentifier, [
3943
'waitFor',
4044
'waitForElementToBeRemoved',

lib/rules/no-wait-for-multiple-assertions.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
callExpressionNode
4343
);
4444

45+
if (!callExpressionIdentifier) {
46+
return;
47+
}
48+
4549
if (!helpers.isAsyncUtil(callExpressionIdentifier, ['waitFor'])) {
4650
return;
4751
}

lib/rules/no-wait-for-side-effects.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ export default createTestingLibraryRule<Options, MessageIds>({
4545
callExpressionNode
4646
);
4747

48+
if (!callExpressionIdentifier) {
49+
return;
50+
}
51+
4852
if (!helpers.isAsyncUtil(callExpressionIdentifier, ['waitFor'])) {
4953
return;
5054
}

tests/create-testing-library-rule.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,10 @@ ruleTester.run(RULE_NAME, rule, {
307307
const utils = somethingElse.render()
308308
`,
309309
},
310+
311+
// Weird edge cases
312+
`(window as any).__THING = false;`,
313+
`thing.method.lastCall.args[0]();`,
310314
],
311315
invalid: [
312316
// Test Cases for Imports

0 commit comments

Comments
 (0)