From 0d0e9075cd704fb91024dac90548c6139696e6df Mon Sep 17 00:00:00 2001 From: Abraham Guo Date: Wed, 10 Jul 2024 23:57:42 -0500 Subject: [PATCH 1/2] no-unreachable-loop --- eslint.config.mjs | 1 + .../eslint-plugin/src/rules/no-mixed-enums.ts | 21 ++++++++----------- .../src/rules/no-unsafe-return.ts | 3 ++- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 4c259bee01a1..055a9d2d9743 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -206,6 +206,7 @@ export default tseslint.config( 'error', { commentPattern: '.*intentional fallthrough.*' }, ], + 'no-unreachable-loop': 'error', 'one-var': ['error', 'never'], // diff --git a/packages/eslint-plugin/src/rules/no-mixed-enums.ts b/packages/eslint-plugin/src/rules/no-mixed-enums.ts index e8a06d9861e0..a3eddf6f2a0f 100644 --- a/packages/eslint-plugin/src/rules/no-mixed-enums.ts +++ b/packages/eslint-plugin/src/rules/no-mixed-enums.ts @@ -170,18 +170,15 @@ export default createRule({ .getSymbolAtLocation(tsNode)! .getDeclarations()!; - for (const declaration of declarations) { - for (const member of (declaration as ts.EnumDeclaration).members) { - return member.initializer - ? tsutils.isTypeFlagSet( - typeChecker.getTypeAtLocation(member.initializer), - ts.TypeFlags.StringLike, - ) - ? AllowedType.String - : AllowedType.Number - : AllowedType.Number; - } - } + const [{ initializer }] = (declarations[0] as ts.EnumDeclaration) + .members; + return initializer && + tsutils.isTypeFlagSet( + typeChecker.getTypeAtLocation(initializer), + ts.TypeFlags.StringLike, + ) + ? AllowedType.String + : AllowedType.Number; } // Finally, we default to the type of the first enum member diff --git a/packages/eslint-plugin/src/rules/no-unsafe-return.ts b/packages/eslint-plugin/src/rules/no-unsafe-return.ts index ae959627c09d..d9c7cd60cc0f 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-return.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-return.ts @@ -166,7 +166,8 @@ export default createRule({ }); } - for (const signature of functionType.getCallSignatures()) { + const signature = functionType.getCallSignatures().at(0); + if (signature) { const functionReturnType = signature.getReturnType(); const result = isUnsafeAssignment( returnNodeType, From 47050cbbb928bf6cf7b5df89bb189fd0c9cbd7f2 Mon Sep 17 00:00:00 2001 From: Abraham Guo Date: Thu, 11 Jul 2024 00:24:27 -0500 Subject: [PATCH 2/2] add test --- packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts index dc5e1df369d6..c30c6a2b0bf1 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-return.test.ts @@ -127,6 +127,7 @@ function foo(): Set { return [] as any[]; } `, + 'const foo: (() => void) | undefined = () => 1;', ], invalid: [ {