携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情
AST的公共属性
每种AST都有自己的属性,其中有一些属性是每种AST都会有的,这些就是AST的公共属性。
type属性
AST节点的类型,比如File节点的type值就是File。
start、end、loc
这3个属性记录着节点在源码中的位置信息。
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 即可,有时候我们想要将代码中的单引号替换成双引号(或者反过来),就会用到这个属性。