基于ts-morph构建统一编译上下文
关于 ts-morph
ts-morph
是一层对TS
编译API
的封装[1],使得操作AST
变得简单高效起来,且提供了开箱即用的项目级编译支持,因而可以很快的构建自己的TS
项目编译上下文;除此以外,ts-morph
基本上保留了所有原始TS AST
节点类型的访问,因此如果有啥TS
编译API
目前还没封装暴露,可以完全退回到原始API
进行相应的使用[2],所以不必担心ts-morph
会有过度封装而导致无法使用一些底层API
。
关于 TS 编译 API
顾名思义,就是用于TS
编译的,通常用于获取和编辑TS AST
(抽象语法树)信息,直接通过typescript
这个包提供;关于TS
编译流程、AST
数据结构以及常用的编译API
就不再赘述,更多可以参考——TS AST转换实例:从类型声明生成初始化数据 | snowdream;
关于 AST
简言之,AST
可以获取到源码的所有(合法)语法信息,同时构造(或修改)AST
也能得到对应的代码,可以理解为AST
结构与代码之间是一种双射关系。
AST
的用处很多,常见的language server
都会借助AST
信息来进行各种语言DX
功能开发(如:自动补全、类型显示、语法诊断、代码格式化等等);同时,由于AST
结构可以转换为代码,所以修改AST
结构可以从语法层面进行代码的修改(这比直接从文本替换来说效率高多了),因此AST
也被来扩展语法的使用(前提是合法的语法,即从一种合法的语法转为另一种合法的语法,以便提高开发效率);
P.s
:如果修改AST
已经不能满足你的语法需求了,那么是时候考虑进入诸如TC39
这种语言标准化组织或者开辟自己的语言了😁。