BSL020 — Control flow statements should not be nested too deep¶
Summary¶
Control flow statements should not be nested too deep
Identifiers¶
| Field | Value |
|---|---|
| Rule code | BSL020 |
| Compatible alias | NestedStatements |
| Severity | WARNING |
| Enabled by default | Yes |
| Implemented | Yes |
| Tags | brain-overload |
Behavior¶
- The public identifier
BSL020and aliasNestedStatementsare stable. - The rule reports the cases documented on this page.
- Suppressions and project configuration are applied before publication.
- The rule requires neither an external analyzer nor network access.
Configuration and suppression¶
BSL### is the primary stable identifier. The compatible alias is accepted
in select, ignore, and compatible block suppression comments.
All three suppression families support both a current line and a range. When an opening comment follows code, it affects only that line. Use any one form:
noqa:
bsl-disable:
- compatible
BSLLSform:
When the same opening comment is on a line by itself, it starts a range. Close it with the matching marker from the same family:
// noqa: BSL020
// code without this diagnostic
// noqa-enable: BSL020
// bsl-disable: BSL020
// code without this diagnostic
// bsl-enable: BSL020
// BSLLS:NestedStatements-off
// code without this diagnostic
// BSLLS:NestedStatements-on
To disable the rule until the end of the file, omit the closing
noqa-enable, bsl-enable, or BSLLS:…-on marker.
Opening and closing markers must belong to the same family.
Description¶
Nested "If, "For", "For Each", "While" and "Try" operators are the key ingredients for creating so-called "spaghetti code".
Such code is hard for reading, refactoring and support.
Examples¶
Incorrect
If Something Then // Allowed - level = 1
/* ... */
If Some Then // Allowed - level = 2
/* ... */
For Num = 0 To 10 Do // Allowed - level = 3
/* ... */
If OneMoreCondition Then // Acceptable - level = 4, limit is reached, not yet breached
If SomethingElse Then // Level = 5, Limit is breached
/* ... */
EndIf;
Return;
EndIf;
EndDo;
EndIf;
EndIf;