From fc2e58a38b25f2486203ef9680de39ac37b3c59b Mon Sep 17 00:00:00 2001 From: Melanie Calame Date: Mon, 29 May 2023 23:15:38 +0200 Subject: [PATCH 1/4] fix: exempt bit shift operators --- .../src/rules/no-unsafe-enum-comparison.ts | 13 +++++++++++++ .../tests/rules/no-unsafe-enum-comparison.test.ts | 7 +++++++ 2 files changed, 20 insertions(+) diff --git a/packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts b/packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts index ac7a64727bc..932896f0a0e 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts @@ -66,6 +66,19 @@ export default util.createRule({ 'BinaryExpression[operator=/=|<|>/]'( node: TSESTree.BinaryExpression, ): void { + // Exempt bit shift operators since they are not comparisons + // + // ```ts + // enum Fruit { + // Apple, + // } + // + // const myBitShift = 1 << Fruit.Apple; + // ``` + if (node.operator === '>>' || node.operator === '<<') { + return; + } + const left = getTypeFromNode(node.left); const right = getTypeFromNode(node.right); diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts index 5e84c983076..e19a9429212 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts @@ -290,6 +290,13 @@ ruleTester.run('strict-enums-comparison', rule, { num === someFunction; mixed === someFunction; `, + ` + enum Fruit { + Apple, + } + + const bitShift = 1 << Fruit.Apple; + `, ], invalid: [ { From 1b61903dbc85d47a41b6514fc43931a8217f2e28 Mon Sep 17 00:00:00 2001 From: Melanie Calame Date: Mon, 29 May 2023 23:34:18 +0200 Subject: [PATCH 2/4] Add test for other bit shift operator --- .../tests/rules/no-unsafe-enum-comparison.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts index e19a9429212..6d7a60bf6de 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-enum-comparison.test.ts @@ -297,6 +297,13 @@ ruleTester.run('strict-enums-comparison', rule, { const bitShift = 1 << Fruit.Apple; `, + ` + enum Fruit { + Apple, + } + + const bitShift = 1 >> Fruit.Apple; + `, ], invalid: [ { From 3d812c69909794f8ede28c717cf86fbae5cabf63 Mon Sep 17 00:00:00 2001 From: Melanie Calame Date: Wed, 31 May 2023 13:22:17 +0200 Subject: [PATCH 3/4] fix: extend regex to replace if statement --- .../src/rules/no-unsafe-enum-comparison.ts | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts b/packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts index 932896f0a0e..4e59845568d 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts @@ -63,22 +63,9 @@ export default util.createRule({ } return { - 'BinaryExpression[operator=/=|<|>/]'( + 'BinaryExpression[operator=/^[<>!]?={0,3}$/]'( node: TSESTree.BinaryExpression, ): void { - // Exempt bit shift operators since they are not comparisons - // - // ```ts - // enum Fruit { - // Apple, - // } - // - // const myBitShift = 1 << Fruit.Apple; - // ``` - if (node.operator === '>>' || node.operator === '<<') { - return; - } - const left = getTypeFromNode(node.left); const right = getTypeFromNode(node.right); From 68938c58a958a34ad1e102047a937a3a4be8dc3a Mon Sep 17 00:00:00 2001 From: Melanie Calame Date: Wed, 31 May 2023 21:35:43 +0200 Subject: [PATCH 4/4] fix: use more precise regex --- packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts b/packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts index 4e59845568d..2a86dbe3e27 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-enum-comparison.ts @@ -63,7 +63,7 @@ export default util.createRule({ } return { - 'BinaryExpression[operator=/^[<>!]?={0,3}$/]'( + 'BinaryExpression[operator=/^[<>!=]?={0,2}$/]'( node: TSESTree.BinaryExpression, ): void { const left = getTypeFromNode(node.left);