ESLint 原理
JavaScript AST
AST 抽象语法树,用于代码语法的检查、代码风格检查、代码规范化、代码高亮、自动补全等。
展示网站:AST explorer
主要有三步:
- 代码转化为 AST 语法树
esprima - 深度优先遍历 AST
estraverse - 代码生成
escodegen
代码测试:
# 安装
pnpm add esprima estraverse escodegen
测试代码:
const esprima = require('esprima');
const estraverse = require('estraverse');
const escodegen = require('escodegen');
// 源代码
let code = `function ast(){}`;
// 1、code 转换为 AST
let ast = esprima.parseScript(code);
// 2、 遍历 AST
estraverse.traverse(ast, {
enter(node) {
console.log('enter', node.type)
if(node.type === 'FunctionDeclaration') {
node.id.name = 'es'
}
},
leave(node) {
console.log('leave', node.type)
}
})
// 3、AST 转换为 code
let res = escodegen.generate(ast)
console.log(res); // 调试
输出:
enter Program
enter FunctionDeclaration
enter Identifier
leave Identifier
enter BlockStatement
leave BlockStatement
leave FunctionDeclaration
leave Program
function es() {
}