From 6d2d958543c348cd729238a14ef8b786b40f158d Mon Sep 17 00:00:00 2001 From: Yutong Zhu Date: Sun, 30 Jun 2024 23:08:02 -0400 Subject: [PATCH 1/3] re-using logic from builtinSymbolLike in no-implied-eval --- .../src/rules/no-implied-eval.ts | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-implied-eval.ts b/packages/eslint-plugin/src/rules/no-implied-eval.ts index dee23d62d275..5f786a9293e2 100644 --- a/packages/eslint-plugin/src/rules/no-implied-eval.ts +++ b/packages/eslint-plugin/src/rules/no-implied-eval.ts @@ -4,6 +4,7 @@ import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; import { createRule, getParserServices } from '../util'; +import { isBuiltinSymbolLike } from '../../../type-utils/src/builtinSymbolLikes'; const FUNCTION_CONSTRUCTOR = 'Function'; const GLOBAL_CANDIDATES = new Set(['global', 'window', 'globalThis']); @@ -76,14 +77,8 @@ export default createRule({ } // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison - if (symbol && symbol.escapedName === FUNCTION_CONSTRUCTOR) { - const declarations = symbol.getDeclarations() ?? []; - for (const declaration of declarations) { - const sourceFile = declaration.getSourceFile(); - if (services.program.isSourceFileDefaultLibrary(sourceFile)) { - return true; - } - } + if (isBuiltinSymbolLike(services.program, type, FUNCTION_CONSTRUCTOR)) { + return true; } const signatures = checker.getSignaturesOfType( @@ -143,13 +138,11 @@ export default createRule({ const type = services.getTypeAtLocation(node.callee); const symbol = type.getSymbol(); if (symbol) { - const declarations = symbol.getDeclarations() ?? []; - for (const declaration of declarations) { - const sourceFile = declaration.getSourceFile(); - if (services.program.isSourceFileDefaultLibrary(sourceFile)) { - context.report({ node, messageId: 'noFunctionConstructor' }); - return; - } + if ( + isBuiltinSymbolLike(services.program, type, 'FunctionConstructor') + ) { + context.report({ node, messageId: 'noFunctionConstructor' }); + return; } } else { context.report({ node, messageId: 'noFunctionConstructor' }); From 444e855ac500b83392fd4157e0d029c789f892c8 Mon Sep 17 00:00:00 2001 From: Yutong Zhu Date: Sun, 30 Jun 2024 23:47:48 -0400 Subject: [PATCH 2/3] quick fix --- packages/eslint-plugin/src/rules/no-implied-eval.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-implied-eval.ts b/packages/eslint-plugin/src/rules/no-implied-eval.ts index 5f786a9293e2..37e6855b95df 100644 --- a/packages/eslint-plugin/src/rules/no-implied-eval.ts +++ b/packages/eslint-plugin/src/rules/no-implied-eval.ts @@ -3,8 +3,7 @@ import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; -import { createRule, getParserServices } from '../util'; -import { isBuiltinSymbolLike } from '../../../type-utils/src/builtinSymbolLikes'; +import { createRule, getParserServices, isBuiltinSymbolLike } from '../util'; const FUNCTION_CONSTRUCTOR = 'Function'; const GLOBAL_CANDIDATES = new Set(['global', 'window', 'globalThis']); From 3545dcf612d282618f248410569631491444399d Mon Sep 17 00:00:00 2001 From: Yutong Zhu Date: Mon, 1 Jul 2024 12:55:21 -0400 Subject: [PATCH 3/3] removing unnecessay directive --- packages/eslint-plugin/src/rules/no-implied-eval.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/no-implied-eval.ts b/packages/eslint-plugin/src/rules/no-implied-eval.ts index 37e6855b95df..f4cafd3e3735 100644 --- a/packages/eslint-plugin/src/rules/no-implied-eval.ts +++ b/packages/eslint-plugin/src/rules/no-implied-eval.ts @@ -75,7 +75,6 @@ export default createRule({ return true; } - // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison if (isBuiltinSymbolLike(services.program, type, FUNCTION_CONSTRUCTOR)) { return true; }