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>
141 lines
3.5 KiB
Markdown
141 lines
3.5 KiB
Markdown
# Enforce spacing between rest and spread operators and their expressions (rest-spread-spacing)
|
|
|
|
ES2015 introduced the rest and spread operators, which expand an iterable structure into its individual parts. Some examples of their usage are as follows:
|
|
|
|
```js
|
|
let numArr = [1, 2, 3];
|
|
function add(a, b, c) {
|
|
return a + b + c;
|
|
}
|
|
add(...numArr); // -> 6
|
|
|
|
let arr1 = [1, 2, 3];
|
|
let arr2 = [4, 5, 6];
|
|
arr1.push(...arr2); // -> [1, 2, 3, 4, 5, 6]
|
|
|
|
let [a, b, ...arr] = [1, 2, 3, 4, 5];
|
|
a; // -> 1
|
|
b // -> 2
|
|
arr; // -> [3, 4, 5]
|
|
|
|
function numArgs(...args) {
|
|
return args.length;
|
|
}
|
|
numArgs(a, b, c); // -> 3
|
|
```
|
|
|
|
In addition to the above, there is currently a proposal to add object rest and spread properties to the spec. They can be used as follows:
|
|
|
|
```js
|
|
|
|
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
|
|
x; // -> 1
|
|
y; // -> 2
|
|
z; // -> { a: 3, b: 4 }
|
|
|
|
let n = { x, y, ...z };
|
|
n; // -> { x: 1, y: 2, a: 3, b: 4 }
|
|
```
|
|
|
|
As with other operators, whitespace is allowed between the rest or spread operator and the expression it is operating on, which can lead to inconsistent spacing within a codebase.
|
|
|
|
## Rule Details
|
|
|
|
This rule aims to enforce consistent spacing between rest and spread operators and their expressions. The rule also supports object rest and spread properties in ES2018:
|
|
|
|
```json
|
|
{
|
|
"parserOptions": {
|
|
"ecmaVersion": 2018
|
|
}
|
|
}
|
|
```
|
|
|
|
Please read the user guide's section on [configuring parser options](/docs/user-guide/configuring#specifying-parser-options) to learn more.
|
|
|
|
## Options
|
|
|
|
This rule takes one option: a string with the value of `"never"` or `"always"`. The default value is `"never"`.
|
|
|
|
### "never"
|
|
|
|
When using the default `"never"` option, whitespace is not allowed between spread operators and their expressions.
|
|
|
|
```json
|
|
rest-spread-spacing: ["error"]
|
|
```
|
|
|
|
or
|
|
|
|
```json
|
|
rest-spread-spacing: ["error", "never"]
|
|
```
|
|
|
|
Examples of **incorrect** code for this rule with `"never"`:
|
|
|
|
```js
|
|
/*eslint rest-spread-spacing: ["error", "never"]*/
|
|
|
|
fn(... args)
|
|
[... arr, 4, 5, 6]
|
|
let [a, b, ... arr] = [1, 2, 3, 4, 5];
|
|
function fn(... args) { console.log(args); }
|
|
let { x, y, ... z } = { x: 1, y: 2, a: 3, b: 4 };
|
|
let n = { x, y, ... z };
|
|
```
|
|
|
|
Examples of **correct** code for this rule with `"never"`:
|
|
|
|
```js
|
|
/*eslint rest-spread-spacing: ["error", "never"]*/
|
|
|
|
fn(...args)
|
|
[...arr, 4, 5, 6]
|
|
let [a, b, ...arr] = [1, 2, 3, 4, 5];
|
|
function fn(...args) { console.log(args); }
|
|
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
|
|
let n = { x, y, ...z };
|
|
```
|
|
|
|
### "always"
|
|
|
|
When using the `"always"` option, whitespace is required between spread operators and their expressions.
|
|
|
|
```json
|
|
rest-spread-spacing: ["error", "always"]
|
|
```
|
|
|
|
Examples of **incorrect** code for this rule with `"always"`:
|
|
|
|
```js
|
|
/*eslint rest-spread-spacing:["error", "always"]*/
|
|
|
|
fn(...args)
|
|
[...arr, 4, 5, 6]
|
|
let [a, b, ...arr] = [1, 2, 3, 4, 5];
|
|
function fn(...args) { console.log(args); }
|
|
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
|
|
let n = { x, y, ...z };
|
|
```
|
|
|
|
Examples of **correct** code for this rule with `"always"`:
|
|
|
|
```js
|
|
/*eslint rest-spread-spacing: ["error", "always"]*/
|
|
|
|
fn(... args)
|
|
[... arr, 4, 5, 6]
|
|
let [a, b, ... arr] = [1, 2, 3, 4, 5];
|
|
function fn(... args) { console.log(args); }
|
|
let { x, y, ... z } = { x: 1, y: 2, a: 3, b: 4 };
|
|
let n = { x, y, ... z };
|
|
```
|
|
|
|
## When Not To Use It
|
|
|
|
You can safely disable this rule if you do not care about enforcing consistent spacing between spread operators and their expressions.
|
|
|
|
## Further Reading
|
|
|
|
* [Object Rest/Spread Properties for ECMAScript](https://github.com/tc39/proposal-object-rest-spread)
|