Skip to content

Commit 0d0639f

Browse files
authored
fix(eslint-plugin): [strict-boolean-expressions] handle truthy enums (#6618)
fix: handle truthy enums in allowNullableEnum
1 parent a1a20b3 commit 0d0639f

File tree

2 files changed

+98
-1
lines changed

2 files changed

+98
-1
lines changed

packages/eslint-plugin/src/rules/strict-boolean-expressions.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -726,7 +726,12 @@ export default util.createRule<Options, MessageId>({
726726
}
727727

728728
// nullable enum
729-
if (is('nullish', 'number', 'enum') || is('nullish', 'string', 'enum')) {
729+
if (
730+
is('nullish', 'number', 'enum') ||
731+
is('nullish', 'string', 'enum') ||
732+
is('nullish', 'truthy number', 'enum') ||
733+
is('nullish', 'truthy string', 'enum')
734+
) {
730735
if (!options.allowNullableEnum) {
731736
if (isLogicalNegationExpression(node.parent!)) {
732737
context.report({

packages/eslint-plugin/tests/rules/strict-boolean-expressions.test.ts

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,38 @@ ruleTester.run('strict-boolean-expressions', rule, {
166166
`,
167167
options: [{ allowNullableEnum: true }],
168168
},
169+
{
170+
code: `
171+
enum ExampleEnum {
172+
This = 1,
173+
That = 2,
174+
}
175+
const rand = Math.random();
176+
let theEnum: ExampleEnum | null = null;
177+
if (rand < 0.3) {
178+
theEnum = ExampleEnum.This;
179+
}
180+
if (!theEnum) {
181+
}
182+
`,
183+
options: [{ allowNullableEnum: true }],
184+
},
185+
{
186+
code: `
187+
enum ExampleEnum {
188+
This = 'one',
189+
That = 'two',
190+
}
191+
const rand = Math.random();
192+
let theEnum: ExampleEnum | null = null;
193+
if (rand < 0.3) {
194+
theEnum = ExampleEnum.This;
195+
}
196+
if (!theEnum) {
197+
}
198+
`,
199+
options: [{ allowNullableEnum: true }],
200+
},
169201
{
170202
code: `
171203
declare const x: string[] | null;
@@ -1149,6 +1181,66 @@ if (y) {
11491181
}
11501182
`,
11511183
},
1184+
{
1185+
options: [{ allowNullableEnum: false }],
1186+
code: `
1187+
enum ExampleEnum {
1188+
This = 'one',
1189+
That = 'two',
1190+
}
1191+
const theEnum = Math.random() < 0.3 ? ExampleEnum.This : null;
1192+
if (!theEnum) {
1193+
}
1194+
`,
1195+
errors: [
1196+
{
1197+
line: 7,
1198+
column: 14,
1199+
messageId: 'conditionErrorNullableEnum',
1200+
endLine: 7,
1201+
endColumn: 21,
1202+
},
1203+
],
1204+
output: `
1205+
enum ExampleEnum {
1206+
This = 'one',
1207+
That = 'two',
1208+
}
1209+
const theEnum = Math.random() < 0.3 ? ExampleEnum.This : null;
1210+
if (theEnum == null) {
1211+
}
1212+
`,
1213+
},
1214+
{
1215+
options: [{ allowNullableEnum: false }],
1216+
code: `
1217+
enum ExampleEnum {
1218+
This = 1,
1219+
That = 2,
1220+
}
1221+
const theEnum = Math.random() < 0.3 ? ExampleEnum.This : null;
1222+
if (!theEnum) {
1223+
}
1224+
`,
1225+
errors: [
1226+
{
1227+
line: 7,
1228+
column: 14,
1229+
messageId: 'conditionErrorNullableEnum',
1230+
endLine: 7,
1231+
endColumn: 21,
1232+
},
1233+
],
1234+
output: `
1235+
enum ExampleEnum {
1236+
This = 1,
1237+
That = 2,
1238+
}
1239+
const theEnum = Math.random() < 0.3 ? ExampleEnum.This : null;
1240+
if (theEnum == null) {
1241+
}
1242+
`,
1243+
},
11521244
// any in boolean context
11531245
...batchedSingleLineTests<MessageId, Options>({
11541246
code: noFormat`

0 commit comments

Comments
 (0)