From aa7c8063231d9a71bbe2eb2f19b0539e4049dcb2 Mon Sep 17 00:00:00 2001 From: auvred Date: Tue, 16 Jan 2024 08:55:38 +0000 Subject: [PATCH 1/3] fix(eslint-plugin): [prefer-nullish-coalescing] treat any/unknown as non-nullable --- .../src/rules/prefer-nullish-coalescing.ts | 5 +++-- .../tests/rules/prefer-nullish-coalescing.test.ts | 12 ++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts b/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts index c688d75d2771..56071336a0ee 100644 --- a/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts +++ b/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts @@ -10,8 +10,8 @@ import { getTypeFlags, isLogicalOrOperator, isNodeEqual, - isNullableType, isNullLiteral, + isTypeFlagSet, isUndefinedIdentifier, nullThrows, NullThrowsReasons, @@ -309,7 +309,7 @@ export default createRule({ ): void { const tsNode = parserServices.esTreeNodeToTSNodeMap.get(node); const type = checker.getTypeAtLocation(tsNode.left); - if (!isNullableType(type)) { + if (!isTypeFlagSet(type, ts.TypeFlags.Null | ts.TypeFlags.Undefined)) { return; } @@ -334,6 +334,7 @@ export default createRule({ ] .filter((flag): flag is number => typeof flag === 'number') .reduce((previous, flag) => previous | flag, 0); + if ( type.flags !== ts.TypeFlags.Null && type.flags !== ts.TypeFlags.Undefined && diff --git a/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts b/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts index 334754454f1c..8372f90b57aa 100644 --- a/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts @@ -222,6 +222,18 @@ x || y; `, options: [{ ignorePrimitives: true }], })), + ` + declare const x: any; + x || y; + `, + ` + declare const x: unknown; + x || y; + `, + ` + declare const x: never; + x || y; + `, ], invalid: [ ...nullishTypeInvalidTest((nullish, type) => ({ From 56a1ea2d9eddef05fba3a236226080ba98e8aaff Mon Sep 17 00:00:00 2001 From: auvred Date: Tue, 16 Jan 2024 09:02:45 +0000 Subject: [PATCH 2/3] chore: rm unrelated changes --- packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts b/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts index 56071336a0ee..144aa08641b5 100644 --- a/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts +++ b/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts @@ -334,7 +334,6 @@ export default createRule({ ] .filter((flag): flag is number => typeof flag === 'number') .reduce((previous, flag) => previous | flag, 0); - if ( type.flags !== ts.TypeFlags.Null && type.flags !== ts.TypeFlags.Undefined && From ce3d8e0c3d4d4850565cdf04dde85b71b09d3d58 Mon Sep 17 00:00:00 2001 From: auvred Date: Wed, 24 Jan 2024 14:07:13 +0000 Subject: [PATCH 3/3] test: add declarations of 'y' variable --- .../tests/rules/prefer-nullish-coalescing.test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts b/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts index 8372f90b57aa..c37a9431dae7 100644 --- a/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts @@ -224,14 +224,17 @@ x || y; })), ` declare const x: any; + declare const y: number; x || y; `, ` declare const x: unknown; + declare const y: number; x || y; `, ` declare const x: never; + declare const y: number; x || y; `, ],