在自定义 ESLint 规则的修复程序中,是否有一种简单的方法可以删除节点以及后面的换行符?

问题描述 投票:0回答:1

在自定义规则中(严格来说,一个用于 typescript-eslint,但我不认为它对答案有影响),我想在某些情况下删除

ImportDeclaration
节点。问题是当我简单地包含

fixer.remove(node)

在修复数组中我最终得到一个空行;节点后的换行符不会被删除。有没有方便的方法删除该行?我用

const [start, end] = node.range;
fixer.removeRange([start, end + 1])

但这假设换行符始终存在。对于导入声明来说这是一个合理的假设,并且由于其他原因尝试检查它会使代码变得复杂(

fixer.removeRange
实际上位于三元运算符的分支中)。

但是也许有更好的方法来避免我找不到的空行?

eslint typescript-eslint
1个回答
0
投票

您可以使用

context.sourceCode.text
手动检查节点的源文件文本。请参阅https://eslint.org/docs/latest/extend/custom-rules#accessing-the-source-code

例如,这将增加删除的结束范围,同时它是

\n
:

let end = node.range[1] + 1;

while (context.sourceCode.text[end] === "\n") {
  end += 1;
}

fixer.removeRange([node.start, end + 1])

不过——你质疑这个逻辑是否重要是正确的。如今,大多数自定义 ESLint 规则都假设事后将使用单独的格式化程序来清理空格(例如换行符)。 typescript-eslint 特别强烈建议不要关心 lint 规则中的格式问题:https://typescript-eslint.io/linting/troubleshooting/formatting。因此,您可以坚持使用所描述的

 +1
技术。

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