avoid-unconditional-break

Path
lint/correctness/avoid-unconditional-break
Default
Off, opt in
Origin
Falcon
Rule
152 of 512

Reports unconditional break, continue, return or throw in a for-loop body.

Branches, nested loops, try/finally, and labeled jumps are not flattened: they may change which iteration or construct an exit interrupts.

Invalid

example.dartdart
void exits(Iterable<int> values) {
  for (final value in values) { print(value); break; }
  for (final value in values) { print(value); continue; }
  for (final value in values) { print(value); return; }
  for (final value in values) { throw value; }
  for (var i = 0; i < 10; i++) { final value = i; print(value); break; }
}
void bare(Iterable<int> values) {
  for (final value in values) continue;
}
This statement unconditionally interrupts every loop iteration; make the exit conditional.
1void exits(Iterable<int> values) {
2 for (final value in values) { print(value); break; }
This statement unconditionally interrupts every loop iteration; make the exit conditional.
2 for (final value in values) { print(value); break; }
3 for (final value in values) { print(value); continue; }
This statement unconditionally interrupts every loop iteration; make the exit conditional.
3 for (final value in values) { print(value); continue; }
4 for (final value in values) { print(value); return; }
This statement unconditionally interrupts every loop iteration; make the exit conditional.
4 for (final value in values) { print(value); return; }
5 for (final value in values) { throw value; }
This statement unconditionally interrupts every loop iteration; make the exit conditional.
5 for (final value in values) { throw value; }
6 for (var i = 0; i < 10; i++) { final value = i; print(value); break; }
This statement unconditionally interrupts every loop iteration; make the exit conditional.
8void bare(Iterable<int> values) {
9 for (final value in values) continue;

Valid

example.dartdart
void repeat(bool stop) {
  for (var i = 0; i < 10; i++) { if (stop) break; }
  while (stop) { if (stop) continue; break; }
  for (var i = 0; i < 3; i++) { print(i); }
  do { if (stop) break; } while (stop);
  outer: for (;;) { break outer; }
  for (var i = 0; i < 3; i++) {
    switch (i) { case 0: break; default: print(i); }
  }
  while (stop) {
    try { break; } finally { if (stop) continue; }
  }
}

Configure avoid-unconditional-break

Set its severity in falcon.json. See the configuration guide.

falcon.jsonjson
{
  "linter": {
    "rules": {
      "correctness": {
        "avoid-unconditional-break": "error"
      }
    }
  }
}

Or silence one occurrence with a suppression comment; the reason is required.

example.dartdart
// falcon-ignore lint/correctness/avoid-unconditional-break: <reason>