Control Flow Rules

Block formatting, if/else, logical expressions, ternaries, and switch cases

8 rules8 auto-isFixable3 isConfigurable

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

OptionTypeDefaultDescription
maxOperandsinteger3Maximum 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

OptionTypeDefaultDescription
maxOperandsinteger3Maximum 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

OptionTypeDefaultDescription
maxOperandsinteger2Maximum 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"