diff --git a/docs/rules/no-mixed-operators.md b/docs/rules/no-mixed-operators.md index 674a847f7fb..33ce7f65831 100644 --- a/docs/rules/no-mixed-operators.md +++ b/docs/rules/no-mixed-operators.md @@ -122,6 +122,10 @@ var foo = a & b | c; /*eslint no-mixed-operators: ["error", {"groups": [["&&", "||", "?:"]]}]*/ var foo = a || b ? c : d; + +var bar = a ? b || c : d; + +var baz = a ? b : c || d; ``` Examples of **correct** code for this rule with `{"groups": [["&", "|", "^", "~", "<<", ">>", ">>>"], ["&&", "||"]]}` option: @@ -145,6 +149,11 @@ var foo = (a + b) * c; var foo = (a || b) ? c : d; var foo = a || (b ? c : d); + +var bar = a ? (b || c) : d; + +var baz = a ? b : (c || d); +var baz = (a ? b : c) || d; ``` ### allowSamePrecedence diff --git a/lib/rules/no-mixed-operators.js b/lib/rules/no-mixed-operators.js index f0290e93ece..15eb20bed2a 100644 --- a/lib/rules/no-mixed-operators.js +++ b/lib/rules/no-mixed-operators.js @@ -161,17 +161,6 @@ module.exports = { ); } - /** - * Checks whether the operator of a given node is mixed with a - * conditional expression. - * @param {ASTNode} node A node to check. This is a conditional - * expression node - * @returns {boolean} `true` if the node was mixed. - */ - function isMixedWithConditionalParent(node) { - return !astUtils.isParenthesised(sourceCode, node) && !astUtils.isParenthesised(sourceCode, node.test); - } - /** * Gets the operator token of a given node. * @param {ASTNode} node A node to check. This is a BinaryExpression @@ -220,19 +209,13 @@ module.exports = { * @returns {void} */ function check(node) { - if (TARGET_NODE_TYPE.test(node.parent.type)) { - if (node.parent.type === "ConditionalExpression" && !shouldIgnore(node) && isMixedWithConditionalParent(node.parent)) { - reportBothOperators(node); - } else { - if (TARGET_NODE_TYPE.test(node.parent.type) && - isMixedWithParent(node) && - !shouldIgnore(node) - ) { - reportBothOperators(node); - } - } + if ( + TARGET_NODE_TYPE.test(node.parent.type) && + isMixedWithParent(node) && + !shouldIgnore(node) + ) { + reportBothOperators(node); } - } return { diff --git a/tests/lib/rules/no-mixed-operators.js b/tests/lib/rules/no-mixed-operators.js index 3650cd09fce..782af07e310 100644 --- a/tests/lib/rules/no-mixed-operators.js +++ b/tests/lib/rules/no-mixed-operators.js @@ -52,13 +52,29 @@ ruleTester.run("no-mixed-operators", rule, { code: "(a || b) ? c : d", options: [{ groups: [["&&", "||", "?:"]] }] }, + { + code: "a ? (b || c) : d", + options: [{ groups: [["&&", "||", "?:"]] }] + }, + { + code: "a ? b : (c || d)", + options: [{ groups: [["&&", "||", "?:"]] }] + }, { code: "a || (b ? c : d)", options: [{ groups: [["&&", "||", "?:"]] }] }, + { + code: "(a ? b : c) || d", + options: [{ groups: [["&&", "||", "?:"]] }] + }, "a || (b ? c : d)", "(a || b) ? c : d", - "a || b ? c : d" + "a || b ? c : d", + "a ? (b || c) : d", + "a ? b || c : d", + "a ? b : (c || d)", + "a ? b : c || d" ], invalid: [ {