在自定义规则中(严格来说,一个用于 typescript-eslint,但我不认为它对答案有影响),我想在某些情况下删除
ImportDeclaration
节点。问题是当我简单地包含
fixer.remove(node)
在修复数组中我最终得到一个空行;节点后的换行符不会被删除。有没有方便的方法删除该行?我用
const [start, end] = node.range;
fixer.removeRange([start, end + 1])
但这假设换行符始终存在。对于导入声明来说这是一个合理的假设,并且由于其他原因尝试检查它会使代码变得复杂(
fixer.removeRange
实际上位于三元运算符的分支中)。
但是也许有更好的方法来避免我找不到的空行?
您可以使用
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
技术。