前端代码治理:代码分析工具开发实战

AST explorer

codeAnalysis
AnalysisSrc

1
2
文件目录扫描常用的 node 工具库 `glob`:支持配置通配符规则的方式来扫描文件目录,像在 shell 里执行命令一样,获取匹配对应规则的文件
const tsFiles = glob.sync(path.join(process.cwd(), 'src/\*_/_.ts'));

__dirname 表示当前被执行脚本文件所在的目录的绝对路径 ——脚本文件所在目录
process.cwd() 返回运行当前脚本的工作目录的路径 —— 脚本文件执行目录

TypeScript 编译原理

codeAnalysis

1
2
3
4
5
6
7
8
9
10
11
12
// 1.解析代码生成AST对象
SourceCode(源码)~~ 扫描器 ~~> Token 流 ~~ 解析器 ~~> AST

// 2.为AST节点绑定符号
AST ~~ 绑定器 ~~> Symbols

// 3.语义检查,类型检查
AST + Symbols ~~ 检查器 ~~> 类型验证,语义上下文判断

// 4.代码生成阶段(代码分析不需要关注这个阶段)
AST + 检查器 ~~ 发射器 ~~> JavaScript 代码 (无需关注)

AST 中的 Symbol 信息可以保证唯一性

判断节点 Symbol 对象指向的声明节点的 pos 与 end 属性值与同名 API 信息中的 symbolPos 、symbolEnd 属性值是否一致,可以判定当前遍历的节点是否是由 Import 导入的 API 声明,而非局部同名节点。

AnalysisCore