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`