From 0d0639fb25e5ac8d7b5e4ceac4273e17e8ee0249 Mon Sep 17 00:00:00 2001 From: Adam Averay Date: Sun, 19 Mar 2023 04:00:07 +0900 Subject: [PATCH] fix(eslint-plugin): [strict-boolean-expressions] handle truthy enums (#6618) fix: handle truthy enums in allowNullableEnum --- .../src/rules/strict-boolean-expressions.ts | 7 +- .../rules/strict-boolean-expressions.test.ts | 92 +++++++++++++++++++ 2 files changed, 98 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts b/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts index bf58727df29..f1e8eacbdba 100644 --- a/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts +++ b/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts @@ -726,7 +726,12 @@ export default util.createRule({ } // nullable enum - if (is('nullish', 'number', 'enum') || is('nullish', 'string', 'enum')) { + if ( + is('nullish', 'number', 'enum') || + is('nullish', 'string', 'enum') || + is('nullish', 'truthy number', 'enum') || + is('nullish', 'truthy string', 'enum') + ) { if (!options.allowNullableEnum) { if (isLogicalNegationExpression(node.parent!)) { context.report({ diff --git a/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts b/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts index f3b6deef1bf..388c2d4660f 100644 --- a/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts +++ b/packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts @@ -166,6 +166,38 @@ ruleTester.run('strict-boolean-expressions', rule, { `, options: [{ allowNullableEnum: true }], }, + { + code: ` + enum ExampleEnum { + This = 1, + That = 2, + } + const rand = Math.random(); + let theEnum: ExampleEnum | null = null; + if (rand < 0.3) { + theEnum = ExampleEnum.This; + } + if (!theEnum) { + } + `, + options: [{ allowNullableEnum: true }], + }, + { + code: ` + enum ExampleEnum { + This = 'one', + That = 'two', + } + const rand = Math.random(); + let theEnum: ExampleEnum | null = null; + if (rand < 0.3) { + theEnum = ExampleEnum.This; + } + if (!theEnum) { + } + `, + options: [{ allowNullableEnum: true }], + }, { code: ` declare const x: string[] | null; @@ -1149,6 +1181,66 @@ if (y) { } `, }, + { + options: [{ allowNullableEnum: false }], + code: ` + enum ExampleEnum { + This = 'one', + That = 'two', + } + const theEnum = Math.random() < 0.3 ? ExampleEnum.This : null; + if (!theEnum) { + } + `, + errors: [ + { + line: 7, + column: 14, + messageId: 'conditionErrorNullableEnum', + endLine: 7, + endColumn: 21, + }, + ], + output: ` + enum ExampleEnum { + This = 'one', + That = 'two', + } + const theEnum = Math.random() < 0.3 ? ExampleEnum.This : null; + if (theEnum == null) { + } + `, + }, + { + options: [{ allowNullableEnum: false }], + code: ` + enum ExampleEnum { + This = 1, + That = 2, + } + const theEnum = Math.random() < 0.3 ? ExampleEnum.This : null; + if (!theEnum) { + } + `, + errors: [ + { + line: 7, + column: 14, + messageId: 'conditionErrorNullableEnum', + endLine: 7, + endColumn: 21, + }, + ], + output: ` + enum ExampleEnum { + This = 1, + That = 2, + } + const theEnum = Math.random() < 0.3 ? ExampleEnum.This : null; + if (theEnum == null) { + } + `, + }, // any in boolean context ...batchedSingleLineTests({ code: noFormat`