AST实例

阅读时间约 2 分钟

调用 $() 即可将一段代码或一个ast节点构造为GoGoCode的核心AST实例。支持js(包括jsx)、html、vue

$(code, options)

入参说明类型举例
code需要被实例化的代码或AST节点string NodePath Node'var a = 1'
optionsparseOptions解析js时,它与babel/parse的options完全一致
解析html、vue时需要传入language
object{ plugins: ['jsx'] }
{ language: 'html' }
{ language: 'vue' }
astFragment需要插入到代码中的ast节点Node{ content: astNode }
isProgram是否需要返回完整ast
js的完整ast最外层节点是File类型
html完整ast是document类型
Boolean默认为true
$('var a = 1')

$(astNode)

$('<div></div>', { 
  parseOption: { plugins: ['jsx'] }
})

$(`function demo() { $_$content$_$ }`, {
  astFragment: {
      content: $('var a = 1', { isProgram: false }).node
  }
})

$.loadFile(path, options)


与构造函数作用相同,第一个入参可以是文件路径,直接将文件内容实例化


AST实例详细介绍


AST实例包含所有可链式调用的API,将在下一节一一介绍

先介绍两个概念,NodeNodePath


Node

独立的ast节点,结构如下,不同的语句对应不同的type和属性。所有的代码转换都是靠对某个Node中属性的修改


NodePath

包含当前ast节点结构及其路径信息,一般不需要直接操作


AST实例上的属性

  • 0-n 一个AST实例可以挂多个ast NodePath,通过整数索引获取
参数说明
nodePathnodeast节点
parentast节点的父节点
parseOptions构造AST实例时传入的解析参数
match完整节点中被通配符匹配到的节点
node节点结构,同node
value简化后的节点结构,如果节点是字符串类型,则直接是字符串值
  • length

返回匹配到Nodepath的个数

  • node

获取AST实例上的第一个ast节点

  • match

获取AST实例上的第一个ast节点中被通配符匹配到的节点,match的具体解释见.find()