no-cond-assign
Disallow assignment operators in conditional expressions
Using the recommended config from @eslint/js in a configuration file enables this rule
In conditional statements, it is very easy to mistype a comparison operator (such as ==) as an assignment operator (such as =). For example:
// Check the user's job title if (user.jobTitle = "manager") { // user.jobTitle is now incorrect } There are valid reasons to use assignment operators in conditional statements. However, it can be difficult to tell whether a specific assignment was intentional.
Rule Details
This rule disallows ambiguous assignment operators in test conditions of if, for, while, and do...while statements.
Options
This rule has a string option:
"except-parens"(default) allows assignments in test conditions only if they are enclosed in parentheses (for example, to allow reassigning a variable in the test of awhileordo...whileloop)."always"disallows all assignments in test conditions.
except-parens
Examples of incorrect code for this rule with the default "except-parens" option:
/*eslint no-cond-assign: "error"*/ // Unintentional assignment let x; if () { const b = 1; } // Practical example that is similar to an error const setHeight = function (someNode) { do { someNode.height = "100px"; } while (); } Examples of correct code for this rule with the default "except-parens" option:
/*eslint no-cond-assign: "error"*/ // Assignment replaced by comparison let x; if (x === 0) { const b = 1; } // Practical example that wraps the assignment in parentheses const setHeight = function (someNode) { do { someNode.height = "100px"; } while ((someNode = someNode.parentNode)); } // Practical example that wraps the assignment and tests for 'null' const set_height = function (someNode) { do { someNode.height = "100px"; } while ((someNode = someNode.parentNode) !== null); } always
Examples of incorrect code for this rule with the "always" option:
/*eslint no-cond-assign: ["error", "always"]*/ // Unintentional assignment let x; if () { const b = 1; } // Practical example that is similar to an error const setHeight = function (someNode) { do { someNode.height = "100px"; } while (); } // Practical example that wraps the assignment in parentheses const set_height = function (someNode) { do { someNode.height = "100px"; } while (()); } // Practical example that wraps the assignment and tests for 'null' const heightSetter = function (someNode) { do { someNode.height = "100px"; } while (() !== null); } Examples of correct code for this rule with the "always" option:
/*eslint no-cond-assign: ["error", "always"]*/ // Assignment replaced by comparison let x; if (x === 0) { const b = 1; } Related Rules
Version
This rule was introduced in ESLint v0.0.9.