mirror of
https://git.proxmox.com/git/pve-eslint
synced 2025-10-05 05:20:49 +00:00

includes a (minimal) working wrapper Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
128 lines
3.0 KiB
Markdown
128 lines
3.0 KiB
Markdown
# disallow assignment operators in conditional statements (no-cond-assign)
|
|
|
|
In conditional statements, it is very easy to mistype a comparison operator (such as `==`) as an assignment operator (such as `=`). For example:
|
|
|
|
```js
|
|
// 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 a `while` or `do...while` loop)
|
|
* `"always"` disallows all assignments in test conditions
|
|
|
|
### except-parens
|
|
|
|
Examples of **incorrect** code for this rule with the default `"except-parens"` option:
|
|
|
|
```js
|
|
/*eslint no-cond-assign: "error"*/
|
|
|
|
// Unintentional assignment
|
|
var x;
|
|
if (x = 0) {
|
|
var b = 1;
|
|
}
|
|
|
|
// Practical example that is similar to an error
|
|
function setHeight(someNode) {
|
|
"use strict";
|
|
do {
|
|
someNode.height = "100px";
|
|
} while (someNode = someNode.parentNode);
|
|
}
|
|
```
|
|
|
|
Examples of **correct** code for this rule with the default `"except-parens"` option:
|
|
|
|
```js
|
|
/*eslint no-cond-assign: "error"*/
|
|
|
|
// Assignment replaced by comparison
|
|
var x;
|
|
if (x === 0) {
|
|
var b = 1;
|
|
}
|
|
|
|
// Practical example that wraps the assignment in parentheses
|
|
function setHeight(someNode) {
|
|
"use strict";
|
|
do {
|
|
someNode.height = "100px";
|
|
} while ((someNode = someNode.parentNode));
|
|
}
|
|
|
|
// Practical example that wraps the assignment and tests for 'null'
|
|
function setHeight(someNode) {
|
|
"use strict";
|
|
do {
|
|
someNode.height = "100px";
|
|
} while ((someNode = someNode.parentNode) !== null);
|
|
}
|
|
```
|
|
|
|
### always
|
|
|
|
Examples of **incorrect** code for this rule with the `"always"` option:
|
|
|
|
```js
|
|
/*eslint no-cond-assign: ["error", "always"]*/
|
|
|
|
// Unintentional assignment
|
|
var x;
|
|
if (x = 0) {
|
|
var b = 1;
|
|
}
|
|
|
|
// Practical example that is similar to an error
|
|
function setHeight(someNode) {
|
|
"use strict";
|
|
do {
|
|
someNode.height = "100px";
|
|
} while (someNode = someNode.parentNode);
|
|
}
|
|
|
|
// Practical example that wraps the assignment in parentheses
|
|
function setHeight(someNode) {
|
|
"use strict";
|
|
do {
|
|
someNode.height = "100px";
|
|
} while ((someNode = someNode.parentNode));
|
|
}
|
|
|
|
// Practical example that wraps the assignment and tests for 'null'
|
|
function setHeight(someNode) {
|
|
"use strict";
|
|
do {
|
|
someNode.height = "100px";
|
|
} while ((someNode = someNode.parentNode) !== null);
|
|
}
|
|
```
|
|
|
|
Examples of **correct** code for this rule with the `"always"` option:
|
|
|
|
```js
|
|
/*eslint no-cond-assign: ["error", "always"]*/
|
|
|
|
// Assignment replaced by comparison
|
|
var x;
|
|
if (x === 0) {
|
|
var b = 1;
|
|
}
|
|
```
|
|
|
|
## Related Rules
|
|
|
|
* [no-extra-parens](no-extra-parens.md)
|