【Babel】Babel的AST-AST的公共属性

307 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情

AST的公共属性

每种AST都有自己的属性,其中有一些属性是每种AST都会有的,这些就是AST的公共属性。

type属性

AST节点的类型,比如File节点的type值就是File。

image.png

start、end、loc

这3个属性记录着节点在源码中的位置信息。

image.png

start和end

start属性表示该节点在源码中的开始下标,end属性则表示该节点在源码中的结束下标。

loc

loc属性是一个对象,它有一个start属性和end属性,这两个属性都有line属性和column属性,line属性记录开始的行号column属性记录开始的列号。表示这个节点是在第几行第几列开始,第几行第几列结束。

上面的图就表示这行代码是在第2行第0列开始,到第二行第14列结束。

leadingComments、innerComments、trailingComments

三者分别表示开始的注释、中间的注释、结尾的注释。

// 开始的注释
let a = 1;
// 结尾的注释

从上面的代码可以看出,每个节点都可能存在注释,而注释所在的地方一共有开头结尾中间这3种,我们想要拿到某个节点的注释就可以通过这3个属性。

extra

记录一些额外的信息,用于处理一些特殊情况。比如下面的代码:

const str = 'hello'

如果我们想要修改它的值,只需要修改 extra.rawValue 即可,但是如果我们想要将赋值号右边整个字面量都换掉,则修改 extra.raw 即可,有时候我们想要将代码中的单引号替换成双引号(或者反过来),就会用到这个属性。