JS.BASE.MULTILINE.TERNARY

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:

var foo = bar > baz ? value1 : value2;

The above can be rewritten as the following to improve readability and more clearly delineate the operands:

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 JS.BASE.OPERATOR.LINEBREAK 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.

always

This is the default option.

Examples of code for this rule with the "always" option:

/*eslint multiline-ternary: ["error", "always"]*/

foo > bar ? value1 : value2;

foo > bar ? value :
    value2;

foo > bar ?
    value : value2;

Examples of code for this rule with the "always" option:

/*eslint multiline-ternary: ["error", "always"]*/

foo > bar ?
    value1 :
    value2;

foo > bar ?
    (baz > qux ?
        value1 :
        value2) :
    value3;

always-multiline

Examples of code for this rule with the "always-multiline" option:

/*eslint multiline-ternary: ["error", "always-multiline"]*/

foo > bar ? value1 :
    value2;

foo > bar ?
    value1 : value2;

foo > bar &&
    bar > baz ? value1 : value2;

Examples of code for this rule with the "always-multiline" option:

/*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 code for this rule with the "never" option:

/*eslint multiline-ternary: ["error", "never"]*/

foo > bar ? value :
    value2;

foo > bar ?
    value : value2;

foo >
    bar ?
    value1 :
    value2;

Examples of code for this rule with the "never" option:

/*eslint multiline-ternary: ["error", "never"]*/

foo > bar ? value1 : value2;

foo > bar ? (baz > qux ? value1 : value2) : value3;

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

  • JS.BASE.OPERATOR.LINEBREAK

Compatibility

  • : requireMultiLineTernary