Skip to content

Commit

Permalink
perf: don't collect more info than needed when resolving jest functio…
Browse files Browse the repository at this point in the history
…ns (#1275)
  • Loading branch information
G-Rath committed Nov 4, 2022
1 parent b9faa0f commit e4a5674
Showing 1 changed file with 34 additions and 8 deletions.
42 changes: 34 additions & 8 deletions src/rules/utils/parseJestFnCall.ts
Expand Up @@ -550,6 +550,34 @@ const collectReferences = (scope: TSESLint.Scope.Scope) => {
return { locals, imports, unresolved };
};

const resolveScope = (scope: TSESLint.Scope.Scope, identifier: string) => {
let currentScope: TSESLint.Scope.Scope | null = scope;

while (currentScope !== null) {
for (const ref of currentScope.variables) {
if (ref.defs.length === 0) {
continue;
}

const def = ref.defs[ref.defs.length - 1];

const importDetails = describePossibleImportDef(def);

if (importDetails?.local === identifier) {
return importDetails;
}

if (ref.name === identifier) {
return 'local';
}
}

currentScope = currentScope.upper;
}

return null;
};

interface ResolvedJestFn {
original: string | null;
local: string;
Expand All @@ -560,9 +588,13 @@ const resolveToJestFn = (
context: TSESLint.RuleContext<string, unknown[]>,
identifier: string,
): ResolvedJestFn | null => {
const references = collectReferences(context.getScope());
const maybeImport = resolveScope(context.getScope(), identifier);

const maybeImport = references.imports.get(identifier);
// the identifier was found as a local variable or function declaration
// meaning it's not a function from jest
if (maybeImport === 'local') {
return null;
}

if (maybeImport) {
// the identifier is imported from @jest/globals,
Expand All @@ -578,12 +610,6 @@ const resolveToJestFn = (
return null;
}

// the identifier was found as a local variable or function declaration
// meaning it's not a function from jest
if (references.locals.has(identifier)) {
return null;
}

return {
original: resolvePossibleAliasedGlobal(identifier, context),
local: identifier,
Expand Down

0 comments on commit e4a5674

Please sign in to comment.