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

问题描述 投票:5回答:2

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

我有以下代码,我想用这条规则忽略:

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

具体来说,d和后续行的行被报告为有两个以上的空间。我想忽略规则中的那些行,但我无法弄清楚应该应用的节点。

节点类型指定为in this repo。我知道像这个代码中使用的三元表达式是一个ConditionalExpression节点,它看起来像template literal node存在,但我不能让它工作。

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

javascript eslint ternary-operator lint template-literals
2个回答
4
投票

从简单的ast tree查看${foo},我确认它确实是TemplateLiteral节点。但是我碰巧也知道那里的解决方案:你也需要选择它的孩子。这可以用TemplateLiteral > *完成。你的解决方案无法正常工作的原因是因为ESLint将免除TemplateLiteral的缩进规则,但只有小的${}部分,而不是内容。

这可以进入你的ESLintrc文件:

"indent": [{ "ignoredNodes": ["TemplateLiteral > *"] }]

对不起,没有人能够尽快回答你的问题。


2
投票

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

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

您还必须指定正常的缩进规则,例如"error", 2强制执行2个空格或"error", "tab"标签。

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

© www.soinside.com 2019 - 2024. All rights reserved.