Skip to content

Commit e0da981

Browse files
zaicevasBelco90
andauthored
fix(no-unnecessary-act): fix false positives when isStrict option is set to false (#418)
* fix: false positives in no-unnecessary-act when isStrict is OFF * refactor: use experimental-utils Co-authored-by: Mario Beltrán Alarcón <[email protected]>
1 parent 4808bca commit e0da981

File tree

2 files changed

+46
-6
lines changed

2 files changed

+46
-6
lines changed

lib/rules/no-unnecessary-act.ts

+22-6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
import { TSESTree } from '@typescript-eslint/experimental-utils';
1+
import { TSESTree, ASTUtils } from '@typescript-eslint/experimental-utils';
22

33
import { createTestingLibraryRule } from '../create-testing-library-rule';
44
import {
55
getDeepestIdentifierNode,
6+
getPropertyIdentifierNode,
67
getStatementCallExpression,
78
isEmptyFunction,
9+
isExpressionStatement,
10+
isReturnStatement,
811
} from '../node-utils';
912

1013
export const RULE_NAME = 'no-unnecessary-act';
@@ -52,17 +55,30 @@ export default createTestingLibraryRule<Options, MessageIds>({
5255
function getStatementIdentifier(statement: TSESTree.Statement) {
5356
const callExpression = getStatementCallExpression(statement);
5457

55-
if (!callExpression) {
58+
if (
59+
!callExpression &&
60+
!isExpressionStatement(statement) &&
61+
!isReturnStatement(statement)
62+
) {
5663
return null;
5764
}
5865

59-
const identifier = getDeepestIdentifierNode(callExpression);
66+
if (callExpression) {
67+
return getDeepestIdentifierNode(callExpression);
68+
}
6069

61-
if (!identifier) {
62-
return null;
70+
if (
71+
isExpressionStatement(statement) &&
72+
ASTUtils.isAwaitExpression(statement.expression)
73+
) {
74+
return getPropertyIdentifierNode(statement.expression.argument);
75+
}
76+
77+
if (isReturnStatement(statement) && statement.argument) {
78+
return getPropertyIdentifierNode(statement.argument);
6379
}
6480

65-
return identifier;
81+
return null;
6682
}
6783

6884
/**

tests/lib/rules/no-unnecessary-act.test.ts

+24
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,30 @@ ruleTester.run(RULE_NAME, rule, {
3131
await stuffThatDoesNotUseRTL();
3232
});
3333
34+
await act(async () => {
35+
await stuffThatDoesNotUseRTL;
36+
});
37+
38+
await act(() => stuffThatDoesNotUseRTL);
39+
40+
act(() => stuffThatDoesNotUseRTL);
41+
42+
act(() => {
43+
return stuffThatDoesNotUseRTL
44+
});
45+
46+
act(async function() {
47+
await stuffThatDoesNotUseRTL;
48+
});
49+
50+
await act(async function() {
51+
await stuffThatDoesNotUseRTL;
52+
});
53+
54+
act(async function() {
55+
return stuffThatDoesNotUseRTL;
56+
});
57+
3458
act(function() {
3559
stuffThatDoesNotUseRTL();
3660
const a = foo();

0 commit comments

Comments
 (0)