コンテンツへスキップ

@stylistic/js/

rest-spread-spacing

ES2015では、反復可能な構造体を個々の要素に展開するrestとspread演算子が導入されました。使用例を以下に示します。

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

上記に加えて、現在、オブジェクトのrestとspreadプロパティを仕様に追加する提案があります。それらは次のように使用できます。

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 }

他の演算子と同様に、restまたはspread演算子とその演算対象の式の間には空白を許容されますが、これによりコードベース内でスペースが不整合になる可能性があります。

ルール詳細

このルールは、restとspread演算子とその式の間の一貫したスペースを適用することを目的としています。このルールは、ES2018のオブジェクトrestとspreadプロパティもサポートしています。

json
{
    "parserOptions": {
        "ecmaVersion": 2018
    }
}

詳しくは、ユーザーガイドのパーサーオプションの設定に関するセクションをご覧ください。

オプション

このルールは、"never"または"always"の値を持つ文字列である1つのオプションを受け取ります。デフォルト値は"never"です。

"never"

デフォルトの"never"オプションを使用する場合、spread演算子とその式の間には空白を許容しません。

json
rest-spread-spacing: ["error"]

または

json
rest-spread-spacing: ["error", "never"]

"never"を使用したこのルールの**不正な**コードの例

js
/*eslint @stylistic/js/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 };
incorrect

"never"を使用したこのルールの**正しい**コードの例

js
/*eslint @stylistic/js/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 };
correct

"always"

"always"オプションを使用する場合、spread演算子とその式の間には空白が必要です。

json
rest-spread-spacing: ["error", "always"]

"always"を使用したこのルールの**不正な**コードの例

js
/*eslint @stylistic/js/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 };
incorrect

"always"を使用したこのルールの**正しい**コードの例

js
/*eslint @stylistic/js/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 };
correct

使用しない場合

spread演算子とその式の間の一貫したスペースを適用することに関心がない場合は、このルールを安全に無効化できます。

MITライセンスの下でリリースされています。