Control Flow Rules
Block formatting, if/else, logical expressions, ternaries, and switch cases
8 rules8 auto-isFixable3 isConfigurable
On This Page
block-statement-newlines
auto-isFixable
Newline after { and before } in block statements
Why: Consistent block formatting improves readability
Correct
javascript
if (condition) { doSomething();}Incorrect
javascript
if (condition) { doSomething(); }eslint.config.js
javascript
"code-style/block-statement-newlines": "error"empty-line-after-block
auto-isFixable
Empty line required between closing } and next statement
Why: Visual separation between logical blocks improves readability
Correct
javascript
if (condition) { doSomething();} const x = 1;Incorrect
javascript
if (condition) { doSomething();}const x = 1;eslint.config.js
javascript
"code-style/empty-line-after-block": "error"if-else-spacing
auto-isFixable
Empty line between consecutive if blocks, no empty line between single-line if/else
Why: Maintains visual separation between distinct conditional blocks
Correct
javascript
if (status === "loading") { return <Loading />;} if (status === "error") { return <Error />;}Incorrect
javascript
if (status === "loading") { return <Loading />;}if (status === "error") { return <Error />;}eslint.config.js
javascript
"code-style/if-else-spacing": "error"if-statement-format
auto-isFixable
{ on same line as if/else if, else on same line as }
Why: Follows the most common JavaScript style (K&R / 'one true brace style')
Correct
javascript
if (condition) { doSomething();} else { doOther();}Incorrect
javascript
if (condition){ doSomething();}else{ doOther();}eslint.config.js
javascript
"code-style/if-statement-format": "error"logical-expression-multiline
auto-isFixableisConfigurable
Logical expressions with more than threshold operands get one per line
Why: Long logical expressions are hard to read on one line
Options
| Option | Type | Default | Description |
|---|---|---|---|
maxOperands | integer | 3 | Maximum operands on a single line |
eslint.config.js
javascript
"code-style/logical-expression-multiline": ["error", { maxOperands: 3 }]Correct
javascript
const err = data.error || data.message || data.status || data.fallback;Incorrect
javascript
const err = data.error || data.message || data.status || data.fallback;eslint.config.js
javascript
"code-style/logical-expression-multiline": "error"multiline-if-conditions
auto-isFixableisConfigurable
If conditions exceeding threshold get one per line
Why: Long conditions are hard to read on one line
Options
| Option | Type | Default | Description |
|---|---|---|---|
maxOperands | integer | 3 | Maximum operands to keep on single line |
eslint.config.js
javascript
"code-style/multiline-if-conditions": ["error", { maxOperands: 3 }]Correct
javascript
if ( isAuthenticated && hasPermission && !isExpired && isEnabled) { allowAccess();}Incorrect
javascript
if (isAuthenticated && hasPermission && !isExpired && isEnabled) {}eslint.config.js
javascript
"code-style/multiline-if-conditions": "error"no-empty-lines-in-switch-cases
auto-isFixable
No empty lines at start of case blocks or between consecutive cases
Why: Empty lines inside switch cases create unnecessary gaps
Correct
javascript
switch (status) { case "pending": return "Waiting..."; case "success": return "Done!";}Incorrect
javascript
switch (status) { case "pending": return "Waiting..."; case "success": return "Done!";}eslint.config.js
javascript
"code-style/no-empty-lines-in-switch-cases": "error"ternary-condition-multiline
auto-isFixableisConfigurable
Simple ternaries on one line; complex ones (>maxOperands) get multiline formatting
Why: Consistent formatting based on complexity, not line length
Options
| Option | Type | Default | Description |
|---|---|---|---|
maxOperands | integer | 2 | Maximum condition operands for single-line ternary |
eslint.config.js
javascript
"code-style/ternary-condition-multiline": ["error", { maxOperands: 2 }]Correct
javascript
const x = a && b ? "yes" : "no"; const style = variant === "ghost" || variant === "danger" || variant === "muted" ? "transparent" : "solid";Incorrect
javascript
const style = variant === "ghost" || variant === "danger" || variant === "muted" ? "transparent" : "solid";eslint.config.js
javascript
"code-style/ternary-condition-multiline": "error"