Skip to content

AST 工具

AST 工具 任务是我们管理所有生成文件的秘器。
这些工具包括 AST 构建器、访问器、如 ContentEqContentHash 这样的特质,以及 TypeScript 类型 —— 所有这些都是机器生成的。

例如,以下文件会自动被生成:

  • crates/oxc_ast/src/generated/ast_builder.rs
  • crates/oxc_ast/src/generated/visit.rs
  • crates/oxc_ast/src/generated/visit_mut.rs
  • crates/oxc_ast/src/generated/derive_content_eq.rs
  • crates/oxc_ast/src/generated/derive_content_hash.rs
  • npm/oxc-types/src/generated/types.d.ts

背景

Rust 的编译时间众所周知很慢,而使用过程宏生成如此多的代码只会让问题更加严重。

如果要求用户在构建时等待代码生成完成,将显著影响下游项目的开发体验。

无论是冷启动还是增量构建,编译时间都可能急剧恶化

RFC

团队在 RFC:生成 AST 相关代码 中讨论了该主题,并达成以下要求和用户故事:

要求

  • 不向用户发布 build.rs
  • 所有生成的代码都提交到 Git。
  • 无需 nightly 版本。
  • Rust 代码是唯一真相来源,需要解析标记为 #[ast] 的类型。
  • 尽可能避免使用编译时过程宏。

工作流

  • 用户修改仓库中的代码。
  • 监控变更的工具捕获改动。
  • 解析所有标记为 #[ast] 的类型。
  • 在模式中记录所有 AST 类型的详细信息。
  • 根据模式生成代码并保存到文件中。

基础设施

更多细节待补充。