Skip to content

Commit 920f7ac

Browse files
committed
fix: allow user-event from custom render utilities
1 parent 35e2b40 commit 920f7ac

File tree

1 file changed

+37
-12
lines changed

1 file changed

+37
-12
lines changed

lib/rules/no-node-access.ts

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
1+
import {
2+
DefinitionType,
3+
type ScopeVariable,
4+
} from '@typescript-eslint/scope-manager';
15
import { TSESTree, ASTUtils } from '@typescript-eslint/utils';
26

37
import { createTestingLibraryRule } from '../create-testing-library-rule';
4-
import { isCallExpression, isMemberExpression } from '../node-utils';
8+
import {
9+
getDeepestIdentifierNode,
10+
getPropertyIdentifierNode,
11+
isCallExpression,
12+
isMemberExpression,
13+
} from '../node-utils';
514
import {
615
ALL_RETURNING_NODES,
716
EVENT_HANDLER_METHODS,
17+
getScope,
818
resolveToTestingLibraryFn,
919
} from '../utils';
1020

@@ -88,24 +98,39 @@ export default createTestingLibraryRule<Options, MessageIds>({
8898
}
8999
}
90100

101+
function detectTestingLibraryFn(
102+
node: TSESTree.CallExpression,
103+
variable: ScopeVariable | null
104+
) {
105+
if (variable && variable.defs.length > 0) {
106+
const def = variable.defs[0];
107+
if (
108+
def.type === DefinitionType.Variable &&
109+
isCallExpression(def.node.init)
110+
) {
111+
return resolveToTestingLibraryFn(def.node.init, context);
112+
}
113+
}
114+
115+
return resolveToTestingLibraryFn(node, context);
116+
}
117+
91118
return {
92119
CallExpression(node: TSESTree.CallExpression) {
93-
const { callee } = node;
94-
const property = isMemberExpression(callee) ? callee.property : null;
95-
const object = isMemberExpression(callee) ? callee.object : null;
96-
97-
const propertyName = ASTUtils.isIdentifier(property)
98-
? property.name
99-
: null;
100-
const objectName = ASTUtils.isIdentifier(object) ? object.name : null;
120+
const property = getDeepestIdentifierNode(node);
121+
const identifier = getPropertyIdentifierNode(node);
101122

102123
const isEventHandlerMethod = EVENT_HANDLER_METHODS.some(
103-
(method) => method === propertyName
124+
(method) => method === property?.name
104125
);
105126
const hasUserEventInstanceName = userEventInstanceNames.has(
106-
objectName ?? ''
127+
identifier?.name ?? ''
107128
);
108-
const testingLibraryFn = resolveToTestingLibraryFn(node, context);
129+
130+
const variable = identifier
131+
? ASTUtils.findVariable(getScope(context, node), identifier)
132+
: null;
133+
const testingLibraryFn = detectTestingLibraryFn(node, variable);
109134

110135
if (
111136
!testingLibraryFn &&

0 commit comments

Comments
 (0)