diff --git a/src/rules/utils/parseJestFnCall.ts b/src/rules/utils/parseJestFnCall.ts index c24949df9..ea1e628bc 100644 --- a/src/rules/utils/parseJestFnCall.ts +++ b/src/rules/utils/parseJestFnCall.ts @@ -181,6 +181,11 @@ const resolvePossibleAliasedGlobal = ( return null; }; +const parseJestFnCallCache = new WeakMap< + TSESTree.CallExpression, + ParsedJestFnCall | string | null +>(); + export const parseJestFnCall = ( node: TSESTree.CallExpression, context: TSESLint.RuleContext, @@ -197,6 +202,23 @@ export const parseJestFnCall = ( export const parseJestFnCallWithReason = ( node: TSESTree.CallExpression, context: TSESLint.RuleContext, +): ParsedJestFnCall | string | null => { + let parsedJestFnCall = parseJestFnCallCache.get(node); + + if (parsedJestFnCall) { + return parsedJestFnCall; + } + + parsedJestFnCall = parseJestFnCallWithReasonInner(node, context); + + parseJestFnCallCache.set(node, parsedJestFnCall); + + return parsedJestFnCall; +}; + +const parseJestFnCallWithReasonInner = ( + node: TSESTree.CallExpression, + context: TSESLint.RuleContext, ): ParsedJestFnCall | string | null => { const chain = getNodeChain(node);