diff --git a/lib/rules/no-cond-assign.js b/lib/rules/no-cond-assign.js index 908dc457704c..0f862820c5fa 100644 --- a/lib/rules/no-cond-assign.js +++ b/lib/rules/no-cond-assign.js @@ -59,7 +59,7 @@ module.exports = { if (isConditionalTestExpression(currentAncestor)) { return currentAncestor.parent; } - } while ((currentAncestor = currentAncestor.parent)); + } while ((currentAncestor = currentAncestor.parent) && currentAncestor.type !== "CallExpression"); return null; } diff --git a/tests/lib/rules/no-cond-assign.js b/tests/lib/rules/no-cond-assign.js index d2ce0acc01f4..454d25ffa89f 100644 --- a/tests/lib/rules/no-cond-assign.js +++ b/tests/lib/rules/no-cond-assign.js @@ -36,8 +36,12 @@ ruleTester.run("no-cond-assign", rule, { "while (someNode || (someNode = parentNode)) { }", "do { } while (someNode || (someNode = parentNode));", "for (;someNode || (someNode = parentNode););", - "if ((function(node) { return (node = parentNode); })(someNode)) { }", - { code: "x = 0;", options: ["always"] } + { code: "if ((function(node) { return (node = parentNode); })(someNode)) { }", options: ["except-parens"] }, + { code: "if ((function(node) { return (node = parentNode); })(someNode)) { }", options: ["always"] }, + { code: "x = 0;", options: ["always"] }, + { code: "if (doSomething(foo = 5, bar=3)) {}", options: ["always"] }, + { code: "if (doSomething(foo = 5, bar=3)) {}", options: ["except-parens"] }, + ], invalid: [ { code: "var x; if (x = 0) { var b = 1; }", errors: [{ message: ERROR_MESSAGE, type: "IfStatement", line: 1, column: 12}] }, @@ -49,7 +53,6 @@ ruleTester.run("no-cond-assign", rule, { { code: "while (someNode || (someNode = parentNode)) { }", options: ["always"], errors: [{ message: "Unexpected assignment within a 'while' statement.", type: "WhileStatement"}] }, { code: "do { } while (someNode || (someNode = parentNode));", options: ["always"], errors: [{ message: "Unexpected assignment within a 'do...while' statement.", type: "DoWhileStatement"}] }, { code: "for (; (typeof l === 'undefined' ? (l = 0) : l); i++) { }", options: ["always"], errors: [{ message: "Unexpected assignment within a 'for' statement.", type: "ForStatement"}] }, - { code: "if ((function(node) { return (node = parentNode); })(someNode)) { }", options: ["always"], errors: [{ message: "Unexpected assignment within an 'if' statement.", type: "IfStatement"}] }, { code: "if (x = 0) { }", options: ["always"], errors: [{ message: "Unexpected assignment within an 'if' statement.", type: "IfStatement"}] }, { code: "while (x = 0) { }", options: ["always"], errors: [{ message: "Unexpected assignment within a 'while' statement.", type: "WhileStatement"}] }, { code: "do { } while (x = x + 1);", options: ["always"], errors: [{ message: "Unexpected assignment within a 'do...while' statement.", type: "DoWhileStatement"}] },