From e1401dc5897d01da516802cfb2333cf4bc6d0e93 Mon Sep 17 00:00:00 2001 From: Soobin Bak Date: Mon, 14 Sep 2020 10:07:43 +0900 Subject: [PATCH] fix(eslint-plugin): [no-implied-eval] handle the `Function` type (#2435) --- packages/eslint-plugin/src/rules/no-implied-eval.ts | 10 ++++++++++ .../eslint-plugin/tests/rules/no-implied-eval.test.ts | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/packages/eslint-plugin/src/rules/no-implied-eval.ts b/packages/eslint-plugin/src/rules/no-implied-eval.ts index afda630b6b6..1e063847da3 100644 --- a/packages/eslint-plugin/src/rules/no-implied-eval.ts +++ b/packages/eslint-plugin/src/rules/no-implied-eval.ts @@ -80,6 +80,16 @@ export default util.createRule({ return true; } + if (symbol && symbol.escapedName === FUNCTION_CONSTRUCTOR) { + const declarations = symbol.getDeclarations() ?? []; + for (const declaration of declarations) { + const sourceFile = declaration.getSourceFile(); + if (program.isSourceFileDefaultLibrary(sourceFile)) { + return true; + } + } + } + const signatures = checker.getSignaturesOfType( type, ts.SignatureKind.Call, diff --git a/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts b/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts index f5ceba4fe94..a9867d73018 100644 --- a/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts +++ b/packages/eslint-plugin/tests/rules/no-implied-eval.test.ts @@ -246,6 +246,11 @@ const fn = (foo: () => void) => { import { Function } from './class'; new Function('foo'); `, + ` +const foo = (callback: Function) => { + setTimeout(callback, 0); +}; + `, ], invalid: [