eslint/no-labels スタイル
何をするか
ラベル付きステートメントの使用を禁止します。
なぜ悪いのか
JavaScriptにおけるラベル付きステートメントは、break や continue と組み合わせて、複数のループの制御フローを調整するために使われます。たとえば:
js
outer: while (true) {
while (true) {
break outer;
}
}この例では、break outer ステートメントにより、コードが無限ループに陥らないように保証されています。これは、outer ラベルが適用された直後の次のステートメントに制御が戻るためです。もしこのステートメントが単に break だけだった場合、制御は外側の while ステートメントに戻り、無限ループとなってしまいます。
一部の状況では便利ですが、ラベルはあまり使われず、多くの開発者によって「誤りを起こしやすく、理解しにくい補助的な制御フロー」として否定的に見られています。
例
このルールに違反する不正なコードの例:
js
label: while (true) {
// ...
}
label: while (true) {
break label;
}
label: while (true) {
continue label;
}
label: switch (a) {
case 0:
break label;
}
label: {
break label;
}
label: if (a) {
break label;
}このルールに従う正しいコードの例:
js
var f = {
label: "foo",
};
while (true) {
break;
}
while (true) {
continue;
}設定
このルールは以下のプロパティを持つ設定オブジェクトを受け入れます。
allowLoop
type: boolean
default: false
true に設定すると、ループステートメントに付随するラベルは無視されます。 このオプションを true にした場合の正しいコードの例:
js
label: while (true) {
break label;
}allowSwitch
type: boolean
default: false
true に設定すると、switch ステートメントに付随するラベルは無視されます。 このオプションを true にした場合の正しいコードの例:
js
label: switch (a) {
case 0:
break label;
}使用方法
このルールを有効化するには、設定ファイルまたは CLI を使って次のように指定できます:
json
{
"rules": {
"no-labels": "error"
}
}bash
oxlint --deny no-labels