Literal 字面量

image.png

没有 UndefinedLiteral

Identifier 标识符

变量名、属性名、参数名。

Statement 语句

statement 是语句,它是可以独立执行的单位,比如:

  • break
  • continue
  • debugger
  • return
  • if 语句
  • while 语句
  • for 语句
  • 声明语句
  • 表达式语句

我们写的每一条可以独立执行的代码都是语句。

Declaration 声明语句

声明语句是一种特殊的语句,它执行的逻辑是在作用域内声明一个变量、函数、class、import、export 等

Expression 表达式

expression 是表达式,特点是执行完以后有返回值,这是和语句 (statement) 的区别。

节点类型

Class

整个 class 的内容是 ClassBody,属性是 ClassProperty,方法是ClassMethod(通过 kind 属性来区分是 constructor 还是 method)。

Modules

import

  1. // import 有 3 种语法:
  2. // 1. named import:
  3. import {c, d} from 'c';
  4. // 2. default import:
  5. import a from 'a';
  6. // 3. namespaced import:
  7. import * as b from 'b';

这 3 种语法都对应 ImportDeclaration 节点,但是 specifiers 属性不同,分别对应 ImportSpicifier、ImportDefaultSpecifier、ImportNamespaceSpcifier。
image.png

export

  1. // export 也有3种语法:
  2. // 1. named export:
  3. export { b, d};
  4. // 2. default export:
  5. export default a;
  6. // 3. all export:
  7. export * from 'c';

image.png

Program & Directive

program 是代表整个程序的节点,它有 body 属性代表程序体,存放 statement 数组,就是具体执行的语句的集合。还有 directives 属性,存放Directive 节点,比如”use strict” 这种指令会使用 Directive 节点表示。

File & Comment

babel 的 AST 最外层节点是 File,它有 program、comments、tokens 等属性,分别存放 Program 程序体、注释、token 等,是最外层节点。

AST 的公共属性

  • type: AST 节点的类型
  • start、end、loc:start 和 end 代表该节点对应的源码字符串的开始和结束下标,不区分行列。而 loc 属性是一个对象,有 line 和 column 属性分别记录开始和结束行列号。
  • leadingComments、innerComments、trailingComments: 表示开始的注释、中间的注释、结尾的注释,因为每个 AST 节点中都可能存在注释,而且可能在开始、中间、结束这三种位置,通过这三个属性来记录和 Comment 的关联。
  • extra:记录一些额外的信息,用于处理一些特殊情况。比如 StringLiteral 修改 value 只是值的修改,而修改 extra.raw 则可以连同单双引号一起修改。