avoid-complex-loop-conditions

Path
lint/complexity/avoid-complex-loop-conditions
Default
Off, opt in
Origin
Falcon
Rule
36 of 512

Flags loop conditions with more logical operands than the configured threshold.

Checks while, do/while, and C-style for conditions. Each operand joined by && or || counts as one; comparisons and calls are opaque. For-in iterables and for-loop initializers and updates are not conditions.

Options

threshold (integer, default: 1) — maximum number of logical operands.

Invalid

example.dartdart
void f(bool a, bool b, bool c) {
  while (a && b && c) { break; }
  while (a || b || c) { break; }
  do {} while (a && (b || c));
  for (; a && b && c;) { break; }
  for (var i = 0; i < 4 && a && b; i++) {}
  final values = [for (var i = 0; i < 4 && a && b; i++) i];
}
Loop condition has 3 logical operands (max 2). Extract a named condition.
1void f(bool a, bool b, bool c) {
2 while (a && b && c) { break; }
Loop condition has 3 logical operands (max 2). Extract a named condition.
2 while (a && b && c) { break; }
3 while (a || b || c) { break; }
Loop condition has 3 logical operands (max 2). Extract a named condition.
3 while (a || b || c) { break; }
4 do {} while (a && (b || c));
Loop condition has 3 logical operands (max 2). Extract a named condition.
4 do {} while (a && (b || c));
5 for (; a && b && c;) { break; }
Loop condition has 3 logical operands (max 2). Extract a named condition.
5 for (; a && b && c;) { break; }
6 for (var i = 0; i < 4 && a && b; i++) {}
Loop condition has 3 logical operands (max 2). Extract a named condition.
6 for (var i = 0; i < 4 && a && b; i++) {}
7 final values = [for (var i = 0; i < 4 && a && b; i++) i];

Valid

example.dartdart
void f(bool a, bool b, List<bool> items) {
  while (a) { break; }
  while (a && b) { break; }
  do {} while (a || b);
  for (var i = 0; i < 2; i++) {}
  for (final item in items) { if (item && a && b) {} }
  for (;;) { break; }
}

Configure avoid-complex-loop-conditions

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

falcon.jsonjson
{
  "linter": {
    "rules": {
      "complexity": {
        "avoid-complex-loop-conditions": "error"
      }
    }
  }
}

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

example.dartdart
// falcon-ignore lint/complexity/avoid-complex-loop-conditions: <reason>