AST学习-认识path和node

认识path和node

path(路径)常用操作

获取当前路径所对应的源代码

1
2
3
4
5
6
// 使用toString()
const vistor = {
VariableDeclaration(path) {
console.log(path.toString())
}
}

判断path是什么type

1
2
3
4
5
6
// 使用 path.isXXX()
const vistor = {
VariableDeclarator(path){
console.log(path.isVariableDeclarator())
}
}

获取path的上一级路径

1
2
let parent = path.parentPath;
console.log(parent.node)

获取path的子路径

1
2
// 使用 get()
path.get('id');

删除path

1
2
// remove()
path.remove()

替换path

1
2
3
4
5
6
7
8
const t = require("@babel/types")
// 单路径可以使用replaceWith方法,多路径则使用replaceWithMultiple方法
const vistor = {
VariableDeclarator(path){
// 替换时注意路径结构
path.get('init').replaceWith(t.NumericLiteral(996));
}
}

path源码

1
@babel\traverse\lib\path

node(节点)常用操作

获取当前节点所对应的源代码

1
2
const generator = require("@babel/generator").default;
let {code} = generator(node);

删除节点

1
delete path.node.init

访问子节点

1
2
3
4
5
6
7
8
9
10
11
12
const vistor = {
VariableDeclarator(path){
// 打印节点初始化的值
console.log(path.node.init.value)

// 与 JSON 之间转换
console.log(JSON.stringify(path.node))
}
}

var ast = parser.parse(jscode);
traverse(ast, vistor)

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!