noConfusingLabels (since v12.0.0)
This rule is recommended by Rome.
Disallow labeled statements that are not loops.
Labeled statements in JavaScript are used in conjunction with break
and continue
to control flow around multiple loops. Their use for other statements is suspicious and unfamiliar.
Source: https://eslint.org/docs/latest/rules/no-labels
Examples
Invalid
label: f();
suspicious/noConfusingLabels.js:1:1 lint/suspicious/noConfusingLabels ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Unexpected label.
> 1 │ label: f();
│ ^^^^^
2 │
ℹ Only loops should be labeled.
The use of labels for other statements is suspicious and unfamiliar.
label: {
f();
break label;
}
suspicious/noConfusingLabels.js:1:1 lint/suspicious/noConfusingLabels ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Unexpected label.
> 1 │ label: {
│ ^^^^^
2 │ f();
3 │ break label;
ℹ Only loops should be labeled.
The use of labels for other statements is suspicious and unfamiliar.
label: if (a) {
f()
break label;
}
suspicious/noConfusingLabels.js:1:1 lint/suspicious/noConfusingLabels ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Unexpected label.
> 1 │ label: if (a) {
│ ^^^^^
2 │ f()
3 │ break label;
ℹ Only loops should be labeled.
The use of labels for other statements is suspicious and unfamiliar.
label: switch (a) {
case 0:
break label;
}
suspicious/noConfusingLabels.js:1:1 lint/suspicious/noConfusingLabels ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Unexpected label.
> 1 │ label: switch (a) {
│ ^^^^^
2 │ case 0:
3 │ break label;
ℹ Only loops should be labeled.
The use of labels for other statements is suspicious and unfamiliar.
Valid
outer: while (a) {
while(b) {
break outer;
}
}