AST 工具
AST 工具 任务作为我们管理所有生成文件的秘密武器。这些工具包括 AST 构建器、访客、像 `ContentEq` 和 `ContentHash` 这样的特征以及 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:codegen AST 相关代码 中讨论了这个话题,并就以下要求和用户故事达成了一致。
要求
- 没有针对用户发布 build.rs。
- 所有生成的代码都检查到 git 中。
- 没有最新版本。
- Rust 代码是事实来源,需要解析标记为 `#[ast]` 的类型。
- 尽可能避免编译时过程宏。
工作流
- 用户更改存储库中的代码。
- 监视变更将其拾取。
- 解析所有标记为 `#[ast]` 的类型。
- 在模式中记录所有 AST 类型的详细信息。
- 从架构中生成代码并保存到文件中。
基础架构
详情稍候发布。