使用 ESLint `indent` 规则忽略模板文字中的缩进

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

indent 的 ESLint 规则允许您使用 ignoredNodes 选项指定忽略哪些节点,当确定规则是否应应用于该节点时。

我有以下代码,我想根据此规则忽略:

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

具体来说,带有 d 的行和后续行被报告为多了两个空格。我想忽略规则中的那些行,但我无法找出应该应用的节点。

指定了节点类型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存在,但我无法让它工作。

我知道我可以使用 eslint-disable-next-lineeslint-disable 等,但我不想使用它们,因为每次出现这种情况我都必须使用它们。

通过简单地 ${foo} 查看 ast tree,我确认它确实是 TemplateLiteral 节点。但是我碰巧也从那里知道了解决方案:你也需要 select 它的 children。这可以用 TemplateLiteral > * 来完成。您的解决方案不起作用的原因是因为 ESLint 从缩进规则中豁免 TemplateLiteral,但只有很少的 ${} 部分,而不是内容。

这可以进入您的 ESLintrc 文件:

"indent": ["error", "tab", { "ignoredNodes": ["TemplateLiteral > *"] }]

很抱歉没有其他人能够更快地回答您的问题。

要忽略模板文字中 ESLint 中的所有缩进和换行错误,包括函数调用或深度嵌套的 JS 语法,您可以使用 "ignoredNodes": ["TemplateLiteral *"](没有 > 子选择器,以针对所有后裔。)

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

您还必须指定正常的缩进规则,例如"error", 2 用于强制使用 2 个空格或 "error", "tab" 用于制表符。

"function-paren-newline" 也在我的模板文字中给出错误,我也想禁用它(因为我正在扩展一个显示错误的现有 ESLint 配置)。