123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.RULE_NAME = void 0;
- const utils_1 = require("@typescript-eslint/utils");
- const create_testing_library_rule_1 = require("../create-testing-library-rule");
- const node_utils_1 = require("../node-utils");
- exports.RULE_NAME = 'no-unnecessary-act';
- exports.default = (0, create_testing_library_rule_1.createTestingLibraryRule)({
- name: exports.RULE_NAME,
- meta: {
- type: 'problem',
- docs: {
- description: 'Disallow wrapping Testing Library utils or empty callbacks in `act`',
- recommendedConfig: {
- dom: false,
- angular: false,
- react: 'error',
- vue: false,
- marko: 'error',
- },
- },
- messages: {
- noUnnecessaryActTestingLibraryUtil: 'Avoid wrapping Testing Library util calls in `act`',
- noUnnecessaryActEmptyFunction: 'Avoid wrapping empty function in `act`',
- },
- schema: [
- {
- type: 'object',
- properties: {
- isStrict: {
- type: 'boolean',
- },
- },
- },
- ],
- },
- defaultOptions: [
- {
- isStrict: true,
- },
- ],
- create(context, [{ isStrict = true }], helpers) {
- function getStatementIdentifier(statement) {
- const callExpression = (0, node_utils_1.getStatementCallExpression)(statement);
- if (!callExpression &&
- !(0, node_utils_1.isExpressionStatement)(statement) &&
- !(0, node_utils_1.isReturnStatement)(statement)) {
- return null;
- }
- if (callExpression) {
- return (0, node_utils_1.getDeepestIdentifierNode)(callExpression);
- }
- if ((0, node_utils_1.isExpressionStatement)(statement) &&
- utils_1.ASTUtils.isAwaitExpression(statement.expression)) {
- return (0, node_utils_1.getPropertyIdentifierNode)(statement.expression.argument);
- }
- if ((0, node_utils_1.isReturnStatement)(statement) && statement.argument) {
- return (0, node_utils_1.getPropertyIdentifierNode)(statement.argument);
- }
- return null;
- }
- function hasSomeNonTestingLibraryCall(statements) {
- return statements.some((statement) => {
- const identifier = getStatementIdentifier(statement);
- if (!identifier) {
- return false;
- }
- return !helpers.isTestingLibraryUtil(identifier);
- });
- }
- function hasTestingLibraryCall(statements) {
- return statements.some((statement) => {
- const identifier = getStatementIdentifier(statement);
- if (!identifier) {
- return false;
- }
- return helpers.isTestingLibraryUtil(identifier);
- });
- }
- function checkNoUnnecessaryActFromBlockStatement(blockStatementNode) {
- const functionNode = blockStatementNode.parent;
- const callExpressionNode = functionNode === null || functionNode === void 0 ? void 0 : functionNode.parent;
- if (!callExpressionNode || !functionNode) {
- return;
- }
- const identifierNode = (0, node_utils_1.getDeepestIdentifierNode)(callExpressionNode);
- if (!identifierNode) {
- return;
- }
- if (!helpers.isActUtil(identifierNode)) {
- return;
- }
- if ((0, node_utils_1.isEmptyFunction)(functionNode)) {
- context.report({
- node: identifierNode,
- messageId: 'noUnnecessaryActEmptyFunction',
- });
- return;
- }
- const shouldBeReported = isStrict
- ? hasTestingLibraryCall(blockStatementNode.body)
- : !hasSomeNonTestingLibraryCall(blockStatementNode.body);
- if (shouldBeReported) {
- context.report({
- node: identifierNode,
- messageId: 'noUnnecessaryActTestingLibraryUtil',
- });
- }
- }
- function checkNoUnnecessaryActFromImplicitReturn(node) {
- var _a;
- const nodeIdentifier = (0, node_utils_1.getDeepestIdentifierNode)(node);
- if (!nodeIdentifier) {
- return;
- }
- const parentCallExpression = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent;
- if (!parentCallExpression) {
- return;
- }
- const identifierNode = (0, node_utils_1.getDeepestIdentifierNode)(parentCallExpression);
- if (!identifierNode) {
- return;
- }
- if (!helpers.isActUtil(identifierNode)) {
- return;
- }
- if (!helpers.isTestingLibraryUtil(nodeIdentifier)) {
- return;
- }
- context.report({
- node: identifierNode,
- messageId: 'noUnnecessaryActTestingLibraryUtil',
- });
- }
- return {
- 'CallExpression > ArrowFunctionExpression > BlockStatement': checkNoUnnecessaryActFromBlockStatement,
- 'CallExpression > FunctionExpression > BlockStatement': checkNoUnnecessaryActFromBlockStatement,
- 'CallExpression > ArrowFunctionExpression > CallExpression': checkNoUnnecessaryActFromImplicitReturn,
- };
- },
- });
|