Skip to content
← Back to rules

eslint/no-labels スタイル

何をするか

ラベル付きステートメントの使用を禁止します。

なぜ悪いのか

JavaScriptにおけるラベル付きステートメントは、breakcontinue と組み合わせて、複数のループの制御フローを調整するために使われます。たとえば:

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

参照