eslint-plugin-jest
Version:
ESLint rules for Jest
57 lines (56 loc) • 1.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _utils = require("@typescript-eslint/utils");
var _utils2 = require("./utils");
var _default = exports.default = (0, _utils2.createRule)({
name: __filename,
meta: {
docs: {
description: 'Disallow unnecessary async function wrapper for expected promises'
},
fixable: 'code',
messages: {
noAsyncWrapperForExpectedPromise: 'Unnecessary async function wrapper'
},
schema: [],
type: 'suggestion'
},
defaultOptions: [],
create(context) {
return {
CallExpression(node) {
const jestFnCall = (0, _utils2.parseJestFnCall)(node, context);
if (jestFnCall?.type !== 'expect') {
return;
}
const {
parent
} = jestFnCall.head.node;
if (parent.type !== _utils.AST_NODE_TYPES.CallExpression) {
return;
}
const [awaitNode] = parent.arguments;
if (!awaitNode || !(0, _utils2.isFunction)(awaitNode) || !awaitNode.async || awaitNode.body.type !== _utils.AST_NODE_TYPES.BlockStatement || awaitNode.body.body.length !== 1) {
return;
}
const [callback] = awaitNode.body.body;
if (callback.type === _utils.AST_NODE_TYPES.ExpressionStatement && callback.expression.type === _utils.AST_NODE_TYPES.AwaitExpression && callback.expression.argument.type === _utils.AST_NODE_TYPES.CallExpression) {
const innerAsyncFuncCall = callback.expression.argument;
context.report({
node: awaitNode,
messageId: 'noAsyncWrapperForExpectedPromise',
fix(fixer) {
const {
sourceCode
} = context;
return [fixer.replaceTextRange([awaitNode.range[0], awaitNode.range[1]], sourceCode.getText(innerAsyncFuncCall))];
}
});
}
}
};
}
});