logo
0
0
WeChat Login
yunfan<jyf1987@gmail.com>
完善 glm-5

astdiff - AST 语义级差异分析工具

基于 AST(抽象语法树)的 TypeScript 代码差异分析工具,比传统文本 diff 更准确地捕捉语义级变更。

安装依赖

bun install

用法

对比文件或目录

bun d <base> <head> [-v|-vv|-vvv]
  • <base> - 基准文件/目录路径
  • <head> - 目标文件/目录路径
  • -v - 显示更多细节(可叠加:-v-vv-vvv

诊断单个文件

bun check <file>

输出该文件的 AST 节点结构和导出信息。

支持的 AST 分析

模块系统

  • Import/Export 语句变更
  • 模块路径变更
  • import type 类型导入
  • 动态导入 import()
  • export default 变更

  • 继承关系(extends)
  • 接口实现(implements)
  • 修饰符(public/private/protected/static/readonly/abstract/override)
  • 私有字段(#field)
  • 静态块(static block)
  • 构造函数、属性、方法、访问器(Getter/Setter)

函数

  • 函数签名变更
  • 函数重载
  • 参数类型、默认值、可选参数、rest 参数
  • 返回值类型
  • 箭头函数
  • async/generator 函数

类型系统

  • Interface(属性、方法、索引签名、继承)
  • TypeAlias(泛型参数、类型定义)
  • Enum(成员变更)
  • 泛型参数(约束、默认值)
  • 条件类型(T extends U ? X : Y
  • 映射类型({ [P in K]: T }
  • keyof / typeof 操作符
  • infer 类型推断
  • 工具类型(Partial, Pick, Omit, Record 等)

变量

  • 变量声明(const/let/var)
  • 类型注解变更
  • 解构赋值
  • 对象字面量属性

高级特性

  • 装饰器(类、方法、属性、参数)
  • 命名空间
  • declare 语句
  • as const 断言
  • satisfies 表达式
  • 非空断言(!
  • 模板字面量类型
  • 类型守卫(in/instanceof
  • TypeScript 注释指令(@ts-ignore 等)
  • declare global 扩展

示例

# 对比两个文件 bun d ./old.ts ./new.ts # 对比两个目录 bun d ./src-old ./src-new # 详细模式 bun d ./old.ts ./new.ts -vv # 诊断文件结构 bun check ./src/main.ts

输出说明

  • 🟢 绿色 + - 新增内容
  • 🟡 黄色 Δ - 变更内容
  • 🔴 红色 - - 删除内容