From 13e59e757e23087990a3c1f02f1c79bfef4c7d80 Mon Sep 17 00:00:00 2001 From: Evgeny Stepanovych Date: Wed, 29 Sep 2021 11:13:46 +0300 Subject: [PATCH 1/2] fix(eslint-plugin): [no-confusing-void-expression] Optional chaining breaks the rule --- .../eslint-plugin/src/rules/no-confusing-void-expression.ts | 5 +++++ .../tests/rules/no-confusing-void-expression.test.ts | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/no-confusing-void-expression.ts b/packages/eslint-plugin/src/rules/no-confusing-void-expression.ts index fd4e97e7360a..0579fb442541 100644 --- a/packages/eslint-plugin/src/rules/no-confusing-void-expression.ts +++ b/packages/eslint-plugin/src/rules/no-confusing-void-expression.ts @@ -268,6 +268,11 @@ export default util.createRule({ } } + if (parent.type === AST_NODE_TYPES.ChainExpression) { + // e.g. `console?.log('foo')` + return findInvalidAncestor(parent); + } + // any other parent is invalid return parent; } diff --git a/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts b/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts index 3586c3388f4f..823252322575 100644 --- a/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts +++ b/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts @@ -22,11 +22,12 @@ ruleTester.run('no-confusing-void-expression', rule, { valid: [ ...batchedSingleLineTests({ code: ` - () => Math.random(); console.log('foo'); + () => Math.random(); foo && console.log(foo); foo || console.log(foo); foo ? console.log(true) : console.log(false); + console?.log?.('foo'); `, }), @@ -69,6 +70,7 @@ ruleTester.run('no-confusing-void-expression', rule, { (console.log('foo') && true) || false; (cond && console.log('ok')) || console.log('error'); !console.log('foo'); + const x = console?.log?.('foo'); `, errors: [ { line: 2, column: 11, messageId: 'invalidVoidExpr' }, @@ -80,6 +82,7 @@ ruleTester.run('no-confusing-void-expression', rule, { { line: 8, column: 10, messageId: 'invalidVoidExpr' }, { line: 9, column: 18, messageId: 'invalidVoidExpr' }, { line: 10, column: 10, messageId: 'invalidVoidExpr' }, + { line: 11, column: 19, messageId: 'invalidVoidExpr' }, ], }), From 39f6554d266d8ee614eedf53d6d0596438b24697 Mon Sep 17 00:00:00 2001 From: Evgeny Stepanovych Date: Wed, 29 Sep 2021 11:41:16 +0300 Subject: [PATCH 2/2] fix(eslint-plugin): [no-confusing-void-expression] Optional chaining breaks the rule --- .../no-confusing-void-expression.test.ts | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts b/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts index 823252322575..e0bdd183a0ee 100644 --- a/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts +++ b/packages/eslint-plugin/tests/rules/no-confusing-void-expression.test.ts @@ -22,12 +22,12 @@ ruleTester.run('no-confusing-void-expression', rule, { valid: [ ...batchedSingleLineTests({ code: ` - console.log('foo'); () => Math.random(); + console.log('foo'); foo && console.log(foo); foo || console.log(foo); foo ? console.log(true) : console.log(false); - console?.log?.('foo'); + console?.log('foo'); `, }), @@ -62,6 +62,7 @@ ruleTester.run('no-confusing-void-expression', rule, { ...batchedSingleLineTests({ code: ` const x = console.log('foo'); + const x = console?.log('foo'); console.error(console.log('foo')); [console.log('foo')]; ({ x: console.log('foo') }); @@ -70,19 +71,18 @@ ruleTester.run('no-confusing-void-expression', rule, { (console.log('foo') && true) || false; (cond && console.log('ok')) || console.log('error'); !console.log('foo'); - const x = console?.log?.('foo'); `, errors: [ { line: 2, column: 11, messageId: 'invalidVoidExpr' }, - { line: 3, column: 23, messageId: 'invalidVoidExpr' }, - { line: 4, column: 10, messageId: 'invalidVoidExpr' }, - { line: 5, column: 15, messageId: 'invalidVoidExpr' }, - { line: 6, column: 14, messageId: 'invalidVoidExpr' }, - { line: 7, column: 9, messageId: 'invalidVoidExpr' }, - { line: 8, column: 10, messageId: 'invalidVoidExpr' }, - { line: 9, column: 18, messageId: 'invalidVoidExpr' }, - { line: 10, column: 10, messageId: 'invalidVoidExpr' }, - { line: 11, column: 19, messageId: 'invalidVoidExpr' }, + { line: 3, column: 19, messageId: 'invalidVoidExpr' }, + { line: 4, column: 23, messageId: 'invalidVoidExpr' }, + { line: 5, column: 10, messageId: 'invalidVoidExpr' }, + { line: 6, column: 15, messageId: 'invalidVoidExpr' }, + { line: 7, column: 14, messageId: 'invalidVoidExpr' }, + { line: 8, column: 9, messageId: 'invalidVoidExpr' }, + { line: 9, column: 10, messageId: 'invalidVoidExpr' }, + { line: 10, column: 18, messageId: 'invalidVoidExpr' }, + { line: 11, column: 10, messageId: 'invalidVoidExpr' }, ], }), pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy