自定义typescript-eslint规则修复器:如何移除节点及后续换行?
解决ESLint自定义规则中移除ImportDeclaration后残留空行的优雅方案
借助ESLint的
SourceCode工具精准处理后续内容
不要手动硬编码字符偏移,而是利用ESLint提供的SourceCode对象来识别节点后的换行或空白。通过getSourceCode()获取源码实例后,用getTokenAfter获取节点后的第一个token,判断是否为换行符,再动态调整移除范围:const sourceCode = context.getSourceCode(); const nextToken = sourceCode.getTokenAfter(node); // 若后续是换行符,则连换行一起移除,否则只移除节点本身 const end = nextToken?.type === 'Line' ? nextToken.range[1] : node.range[1]; return fixer.removeRange([node.range[0], end]);这种方式自动适配“有无换行”的场景,无需额外的复杂判断。
彻底移除后续空白的进阶处理
如果要处理节点后存在多个换行或空白的情况,可以获取下一个有效代码节点的起始位置,将当前节点到该位置的所有内容全部移除:const sourceCode = context.getSourceCode(); const nextValidNode = sourceCode.getNextToken(node, { includeComments: false }); const end = nextValidNode ? nextValidNode.range[0] : node.range[1]; return fixer.removeRange([node.range[0], end]);这样能确保移除ImportDeclaration后,不会留下任何多余的空白或空行,适配更多格式场景。
核心原则:依赖ESLint的语法分析能力
避免手动计算字符偏移量,ESLint已经对AST和token做了完整解析,基于这些解析结果处理移除范围,代码会更健壮,也能适配不同的代码格式规范。
内容的提问来源于stack exchange,提问作者Alexey Romanov
相关产品推荐
相关产品推荐

