estree-walker
简单实用的步行和 ESTree-兼容的AST,例如由 橡子。
安装
npm i estree-walker
用法
var walk = require('estree-walker').walk;
var acorn = require('acorn');
ast = acorn.parse(sourceCode, options); // https://github.com/acornjs/acorn
walk(ast, {
enter(node, parent, prop, index) {
// some code happens
},
leave(node, parent, prop, index) {
// some code happens
}
});
在 enter 函数,调用 this.skip() 会阻止节点的子节点被遍历,或者 leave 函数(可选)被调用。
呼叫 this.replace(new_node) 在任何 enter 或 leave 用新节点替换当前节点。
呼叫 this.remove() 在任何 enter 或 leave 删除当前节点。
为什么不使用estraverse?
ESTree规范正在发展以适应ES6/7。我有过几次经历 estraverse 无法处理由最新版本的acorn生成的AST,因为它硬编码访问者密钥。
相比之下,Estree-walker只是枚举节点的属性来查找子节点(和节点的子列表),因此不受规范更改的影响。它也小得多。(如果你想知道,它们的表现基本上是一样的。)
这些都不应该被认为是对estraverse的批评,它有更多的功能,并且在更多的情况下经过了战斗测试,对此我非常感激。
许可证
麻省理工学院