Skip to content

Commit eca0fac

Browse files
author
Charley
committed
fix: allow un-called async util references
1 parent 2e7e1b6 commit eca0fac

File tree

3 files changed

+35
-13
lines changed

3 files changed

+35
-13
lines changed

lib/rules/await-async-utils.ts

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -121,20 +121,29 @@ export default createTestingLibraryRule<Options, MessageIds>({
121121
functionWrappersNames.push((node.id as TSESTree.Identifier).name);
122122
}
123123
},
124-
'CallExpression Identifier'(node: TSESTree.Identifier) {
124+
CallExpression(node: TSESTree.CallExpression) {
125+
const callExpressionIdentifier = getDeepestIdentifierNode(node);
126+
127+
if (!callExpressionIdentifier) {
128+
return;
129+
}
130+
125131
const isAsyncUtilOrKnownAliasAroundIt =
126-
helpers.isAsyncUtil(node) ||
127-
functionWrappersNames.includes(node.name);
132+
helpers.isAsyncUtil(callExpressionIdentifier) ||
133+
functionWrappersNames.includes(callExpressionIdentifier.name);
128134
if (!isAsyncUtilOrKnownAliasAroundIt) {
129135
return;
130136
}
131137

132138
// detect async query used within wrapper function for later analysis
133-
if (helpers.isAsyncUtil(node)) {
134-
detectAsyncUtilWrapper(node);
139+
if (helpers.isAsyncUtil(callExpressionIdentifier)) {
140+
detectAsyncUtilWrapper(callExpressionIdentifier);
135141
}
136142

137-
const closestCallExpression = findClosestCallExpressionNode(node, true);
143+
const closestCallExpression = findClosestCallExpressionNode(
144+
callExpressionIdentifier,
145+
true
146+
);
138147

139148
if (!closestCallExpression?.parent) {
140149
return;
@@ -146,12 +155,12 @@ export default createTestingLibraryRule<Options, MessageIds>({
146155
);
147156

148157
if (references.length === 0) {
149-
if (!isPromiseHandled(node)) {
158+
if (!isPromiseHandled(callExpressionIdentifier)) {
150159
context.report({
151-
node,
152-
messageId: getMessageId(node),
160+
node: callExpressionIdentifier,
161+
messageId: getMessageId(callExpressionIdentifier),
153162
data: {
154-
name: node.name,
163+
name: callExpressionIdentifier.name,
155164
},
156165
});
157166
}
@@ -160,10 +169,10 @@ export default createTestingLibraryRule<Options, MessageIds>({
160169
const referenceNode = reference.identifier as TSESTree.Identifier;
161170
if (!isPromiseHandled(referenceNode)) {
162171
context.report({
163-
node,
164-
messageId: getMessageId(node),
172+
node: callExpressionIdentifier,
173+
messageId: getMessageId(callExpressionIdentifier),
165174
data: {
166-
name: node.name,
175+
name: callExpressionIdentifier.name,
167176
},
168177
});
169178
return;

tests/lib/rules/await-async-queries.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,11 @@ ruleTester.run(RULE_NAME, rule, {
113113
testingFramework: '@marko/testing-library',
114114
}),
115115

116+
// async queries not called are valid
117+
...createTestCase((query) => `expect(screen.${query}).toBeDefined()`, {
118+
isAsync: false,
119+
}),
120+
116121
// async queries are valid with await operator
117122
...createTestCase(
118123
(query) => `

tests/lib/rules/await-async-utils.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ ruleTester.run(RULE_NAME, rule, {
3131
const aPromise = ${asyncUtil}(() => getByLabelText('email'));
3232
await aPromise;
3333
});
34+
`,
35+
})),
36+
...ASYNC_UTILS.map((asyncUtil) => ({
37+
code: `
38+
import { ${asyncUtil} } from '${testingFramework}';
39+
test('${asyncUtil} util not called is valid', () => {
40+
expect(${asyncUtil}).toBeDefined();
41+
});
3442
`,
3543
})),
3644
...ASYNC_UTILS.map((asyncUtil) => ({

0 commit comments

Comments
 (0)