pve-eslint/eslint/docs/rules/multiline-ternary.md
Dominik Csapak eb39fafa4f first commit
includes a (minimal) working wrapper

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2020-04-06 15:06:03 +02:00

150 lines
3.1 KiB
Markdown

# Enforce or disallow newlines between operands of ternary expressions (multiline-ternary)
JavaScript allows operands of ternary expressions to be separated by newlines, which can improve the readability of your program.
For example:
```js
var foo = bar > baz ? value1 : value2;
```
The above can be rewritten as the following to improve readability and more clearly delineate the operands:
```js
var foo = bar > baz ?
value1 :
value2;
```
## Rule Details
This rule enforces or disallows newlines between operands of a ternary expression.
Note: The location of the operators is not enforced by this rule. Please see the [operator-linebreak](operator-linebreak.md) rule if you are interested in enforcing the location of the operators themselves.
## Options
This rule has a string option:
* `"always"` (default) enforces newlines between the operands of a ternary expression.
* `"always-multiline"` enforces newlines between the operands of a ternary expression if the expression spans multiple lines.
* `"never"` disallows newlines between the operands of a ternary expression (enforcing that the entire ternary expression is on one line).
### always
This is the default option.
Examples of **incorrect** code for this rule with the `"always"` option:
```js
/*eslint multiline-ternary: ["error", "always"]*/
foo > bar ? value1 : value2;
foo > bar ? value :
value2;
foo > bar ?
value : value2;
```
Examples of **correct** code for this rule with the `"always"` option:
```js
/*eslint multiline-ternary: ["error", "always"]*/
foo > bar ?
value1 :
value2;
foo > bar ?
(baz > qux ?
value1 :
value2) :
value3;
```
### always-multiline
Examples of **incorrect** code for this rule with the `"always-multiline"` option:
```js
/*eslint multiline-ternary: ["error", "always-multiline"]*/
foo > bar ? value1 :
value2;
foo > bar ?
value1 : value2;
foo > bar &&
bar > baz ? value1 : value2;
```
Examples of **correct** code for this rule with the `"always-multiline"` option:
```js
/*eslint multiline-ternary: ["error", "always-multiline"]*/
foo > bar ? value1 : value2;
foo > bar ?
value1 :
value2;
foo > bar ?
(baz > qux ? value1 : value2) :
value3;
foo > bar ?
(baz > qux ?
value1 :
value2) :
value3;
foo > bar &&
bar > baz ?
value1 :
value2;
```
### never
Examples of **incorrect** code for this rule with the `"never"` option:
```js
/*eslint multiline-ternary: ["error", "never"]*/
foo > bar ? value :
value2;
foo > bar ?
value : value2;
foo >
bar ?
value1 :
value2;
```
Examples of **correct** code for this rule with the `"never"` option:
```js
/*eslint multiline-ternary: ["error", "never"]*/
foo > bar ? value1 : value2;
foo > bar ? (baz > qux ? value1 : value2) : value3;
```
## When Not To Use It
You can safely disable this rule if you do not have any strict conventions about whether the operands of a ternary expression should be separated by newlines.
## Related Rules
* [operator-linebreak](operator-linebreak.md)
## Compatibility
* **JSCS**: [requireMultiLineTernary](https://jscs-dev.github.io/rule/requireMultiLineTernary)