我想编写几个脚本来自动检测缺少的导入并根据根目录导入它们。将此脚本编写为codemod脚本或使用fix选项编写eslint规则是否更好?
答案 0 :(得分:1)
Codemods用于迁移,而linting则永久地唠叨/警告开发人员他们在开发过程中可能犯的一些错误。两者都可以一起使用。
对于您的情况,我认为您可以采取两种方法:
编写一个检测问题的lint规则和一个用于修复问题现有出现的codemod。 lint规则确保开发人员将来不会错过这一点。
编写检测问题的lint规则以及--fix
选项以自动解决问题。
我倾向于接近二,因为它更具有前瞻性。您可能希望直接使用此no-unresolved
ESLint rule而不是编写自己的{{3}}。在任何情况下,如果你的项目有很多目录和文件,那么fix / codemod并不是一件容易的事情,可能会受到影响。
答案 1 :(得分:0)
您可以结合这两个世界并使用 putout 代码转换器,它可以用作 plugin for eslint 并且对于编写 codemods
非常有用,因为它具有所有需要的基础设施:
在 scopes 的帮助下,您可以轻松检测您使用的变量是否已声明。
下面是一个 plugin
的例子,它可以满足您的需求:@putout/plugin-declare-undefined-variables 它是这样工作的:
import {template} from 'putout';
export const match = () => ({
'await readFile(__a, __b)': (vars, path) => {
return !path.scope.bindings.readFile;
}
});
export const replace = () => ({
'await readFile(__a, __b)': (vars, path) => {
const programScope = path.scope.getProgramParent();
const importNode = template.ast('import {readFile} from "fs/promises"');
programScope.path.node.body.unshift(importNode);
return path;
}
});
这是putout editor
中的样子: