# oxc/branches-sharing-code

> Disallow the same statements at the start or end of every branch of an `if`

When every branch of an `if` starts or ends with the same statements, that code runs no matter what the condition is. Repeating it hides what really differs between the branches, and a later edit can change one copy and miss the others.

The rule looks at an `if` that ends in an `else`, with any number of `else if` in between, where every branch is a block in braces. Without a final `else`, nothing is reported, because the code doesn't always run. Branches that are completely identical aren't reported either.

`--fix-suggestions` moves the statement out of the `if` when exactly one statement is shared.

{/* Generated by src/codegen/lint-rule-docs.ts. Do not edit this section. */}

## Configure

Off by default. To turn it on:

```toml bunfig.toml
[lint.rules]
"oxc/branches-sharing-code" = "error" # or "warn"
```

{/* End of the generated section. */}

## Examples

Reported:

{/* bad */}
```js
if (user.isAdmin) {
  showAdminMenu();
  render();
} else {
  showMenu();
  render();
}
```

Not reported:

{/* good */}
```js
if (user.isAdmin) {
  showAdminMenu();
} else {
  showMenu();
}
render();
```

Shared code at the start is reported too:

{/* bad */}
```js
if (format === "json") {
  const data = load(file);
  printJson(data);
} else if (format === "csv") {
  const data = load(file);
  printCsv(data);
} else {
  const data = load(file);
  printText(data);
}
```

{/* good */}
```js
const data = load(file);
if (format === "json") {
  printJson(data);
} else if (format === "csv") {
  printCsv(data);
} else {
  printText(data);
}
```

## When not to use it

Moving a statement before the `if` makes it run before the condition is evaluated. If the condition has side effects or depends on what the statement changes, the repeated code might be what you want.
