pve-eslint/eslint/docs/rules/no-multi-assign.md
Thomas Lamprecht 609c276fc2 import 8.3.0 source
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2021-12-01 13:39:06 +01:00

100 lines
1.7 KiB
Markdown

# Disallow Use of Chained Assignment Expressions (no-multi-assign)
Chaining the assignment of variables can lead to unexpected results and be difficult to read.
```js
(function() {
const foo = bar = 0; // Did you mean `foo = bar == 0`?
bar = 1; // This will not fail since `bar` is not constant.
})();
console.log(bar); // This will output 1 since `bar` is not scoped.
```
## Rule Details
This rule disallows using multiple assignments within a single statement.
Examples of **incorrect** code for this rule:
```js
/*eslint no-multi-assign: "error"*/
var a = b = c = 5;
const foo = bar = "baz";
let a =
b =
c;
class Foo {
a = b = 10;
}
a = b = "quux";
```
Examples of **correct** code for this rule:
```js
/*eslint no-multi-assign: "error"*/
var a = 5;
var b = 5;
var c = 5;
const foo = "baz";
const bar = "baz";
let a = c;
let b = c;
class Foo {
a = 10;
b = 10;
}
a = "quux";
b = "quux";
```
## Options
This rule has an object option:
* `"ignoreNonDeclaration"`: When set to `true`, the rule allows chains that don't include initializing a variable in a declaration or initializing a class field. Default is `false`.
### ignoreNonDeclaration
Examples of **correct** code for the `{ "ignoreNonDeclaration": true }` option:
```js
/*eslint no-multi-assign: ["error", { "ignoreNonDeclaration": true }]*/
let a;
let b;
a = b = "baz";
const x = {};
const y = {};
x.one = y.one = 1;
```
Examples of **incorrect** code for the `{ "ignoreNonDeclaration": true }` option:
```js
/*eslint no-multi-assign: ["error", { "ignoreNonDeclaration": true }]*/
let a = b = "baz";
const foo = bar = 1;
class Foo {
a = b = 10;
}
```
## Related Rules
* [max-statements-per-line](max-statements-per-line.md)