newline-per-chained-call
改行のない1行のメソッド連鎖呼び出しは読みにくいため、一部の開発者は、可読性と保守性を向上させるために、連鎖内の各メソッド呼び出しの後に改行文字を配置します。
完全に有効な(ただし1行の)次のコードを見てみましょう。
js
d3.select("body").selectAll("p").data([4, 8, 15, 16, 23, 42 ]).enter().append("p").text(function(d) { return "I'm number " + d + "!"; });
ただし、適切な改行を入れると、読みやすく理解しやすくなります。各呼び出しの後に改行を入れた、以下の同じコードを見てください。
js
d3
.select("body")
.selectAll("p")
.data([
4,
8,
15,
16,
23,
42
])
.enter()
.append("p")
.text(function (d) {
return "I'm number " + d + "!";
});
このスタイルを支持するもう1つの議論は、メソッドチェーン内の何かが変更された場合に、差分の明確さが向上することです。
明確さが低い
diff
-d3.select("body").selectAll("p").style("color", "white");
+d3.select("body").selectAll("p").style("color", "blue");
明確さが高い
diff
d3
.select("body")
.selectAll("p")
- .style("color", "white");
+ .style("color", "blue");
ルールの詳細
このルールでは、メソッドチェーンまたは深いメンバーアクセス内の各呼び出しの後に改行が必要です。 instance[something]
などの計算されたプロパティアクセスは除外されます。
オプション
このルールにはオブジェクトオプションがあります。
"ignoreChainWithDepth"
(デフォルト:2
) は、指定された深さまでのチェーンを許可します。
ignoreChainWithDepth
デフォルトの { "ignoreChainWithDepth": 2 }
オプションを使用した、このルールの**誤った**コードの例
js
/*eslint @stylistic/js/newline-per-chained-call: ["error", { "ignoreChainWithDepth": 2 }]*/
_.chain({}).map(foo).filter(bar).value();
// Or
_.chain({}).map(foo).filter(bar);
// Or
_
.chain({}).map(foo)
.filter(bar);
// Or
obj.method().method2().method3();
誤り
デフォルトの { "ignoreChainWithDepth": 2 }
オプションを使用した、このルールの**正しい**コードの例
js
/*eslint @stylistic/js/newline-per-chained-call: ["error", { "ignoreChainWithDepth": 2 }]*/
_
.chain({})
.map(foo)
.filter(bar)
.value();
// Or
_
.chain({})
.map(foo)
.filter(bar);
// Or
_.chain({})
.map(foo)
.filter(bar);
// Or
obj
.prop
.method().prop;
// Or
obj
.prop.method()
.method2()
.method3().prop;
正しい
使用しない場合
競合するルールがある場合、または1行の連鎖呼び出しで問題ない場合は、このルールを安全に無効にすることができます。