首页 > 解决方案 > 使用 ESLint `indent` 规则忽略模板文字中的缩进

问题描述

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

我有以下代码要使用此规则忽略:

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

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

节点类型在此 repo中指定。我知道这个代码中使用的三元表达式是一个ConditionalExpression节点,它似乎存在一个模板文字节点,但我无法让它工作。

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

标签: javascripteslintternary-operatorlinttemplate-literals

解决方案


通过简单地查看ast 树${foo},我确认它确实是TemplateLiteral节点。但是我碰巧也知道那里的解决方案:您还需要选择它的孩子。这可以通过TemplateLiteral > *. 您的解决方案不起作用的原因是因为ESLint 免除TemplateLiteral缩进规则,但只有小部分${}部分,而不是内容。

这可以像这样进入您的 ESLintrc 文件:

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

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


推荐阅读