'Ignore the indentation in a template literal, with the ESLint `indent` rule

The ESLint rule for indent allows for you to specify which nodes are ignored, when determining whether the rule should apply to that node, using the ignoredNodes option.

I've got the following code that I want to ignore with this rule:

const a = b
  ? `c${
      d
    }`
  : e

Specifically, the line with d and the subsequent line are reported as having two more spaces than they should. I want to ignore those lines from the rule, but I can't figure out the node that should apply.

Node types are specified in this repo. I know that ternary expressions, like used in this code, is a ConditionalExpression node, and it seems like a template literal node exists, but I can't get it to work.

I know I can use eslint-disable-next-line, eslint-disable, etc., but I don't want to use those, because then I'd have to use them every time this comes up.



Solution 1:[1]

To ignore all indentation and newline errors in ESLint inside a template literal, including function calls or deeply nested JS syntax, you can use "ignoredNodes": ["TemplateLiteral *"] (without the > child selector, to target all descendants.)

  "rules": {
    "indent": ["error", 2, { "ignoredNodes": ["TemplateLiteral *"] }],
    "function-paren-newline": "off"
  }

You also have to specify your normal indentation rule, e.g. "error", 2 for enforcing 2 spaces or "error", "tab" for tabs.

"function-paren-newline" was also giving errors inside my template literals, I also wanted to disable that (because I'm extending an existing ESLint config that displayed an error for that).

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Maarten ter Horst