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 01e5b45dbb8..62945ac689b 100644 --- a/packages/eslint-plugin/src/rules/no-confusing-void-expression.ts +++ b/packages/eslint-plugin/src/rules/no-confusing-void-expression.ts @@ -205,6 +205,7 @@ export default util.createRule({ suggest: [{ messageId: 'voidExprWrapVoid', fix: wrapVoidFix }], }); } + context.report({ node, messageId: 'invalidVoidExpr', @@ -225,6 +226,11 @@ export default util.createRule({ node.parent, util.NullThrowsReasons.MissingParent, ); + if (parent.type === AST_NODE_TYPES.SequenceExpression) { + if (node !== parent.expressions[parent.expressions.length - 1]) { + return null; + } + } if (parent.type === AST_NODE_TYPES.ExpressionStatement) { // e.g. `{ console.log("foo"); }` 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 ce79ce4966e..b0133a10b3c 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 @@ -57,6 +57,18 @@ ruleTester.run('no-confusing-void-expression', rule, { return void console.log('foo'); `, }), + ` +function cool(input: string) { + return console.log(input), input; +} + `, + { + code: ` +function cool(input: string) { + return input, console.log(input), input; +} + `, + }, ], invalid: [ @@ -87,6 +99,14 @@ ruleTester.run('no-confusing-void-expression', rule, { ], }), + { + code: ` +function notcool(input: string) { + return input, console.log(input); +} + `, + errors: [{ line: 3, column: 17, messageId: 'invalidVoidExpr' }], + }, { code: "() => console.log('foo');", errors: [{ line: 1, column: 7, messageId: 'invalidVoidExprArrow' }],