AST 工具
AST 工具 任务是我们管理所有生成文件的秘器。
这些工具包括 AST 构建器、访问器、如 ContentEq 和 ContentHash 这样的特质,以及 TypeScript 类型 —— 所有这些都是机器生成的。
例如,以下文件会自动被生成:
crates/oxc_ast/src/generated/ast_builder.rscrates/oxc_ast/src/generated/visit.rscrates/oxc_ast/src/generated/visit_mut.rscrates/oxc_ast/src/generated/derive_content_eq.rscrates/oxc_ast/src/generated/derive_content_hash.rsnpm/oxc-types/src/generated/types.d.ts
背景
Rust 的编译时间众所周知很慢,而使用过程宏生成如此多的代码只会让问题更加严重。
如果要求用户在构建时等待代码生成完成,将显著影响下游项目的开发体验。
无论是冷启动还是增量构建,编译时间都可能急剧恶化。
RFC
团队在 RFC:生成 AST 相关代码 中讨论了该主题,并达成以下要求和用户故事:
要求
- 不向用户发布
build.rs。 - 所有生成的代码都提交到 Git。
- 无需 nightly 版本。
- Rust 代码是唯一真相来源,需要解析标记为
#[ast]的类型。 - 尽可能避免使用编译时过程宏。
工作流
- 用户修改仓库中的代码。
- 监控变更的工具捕获改动。
- 解析所有标记为
#[ast]的类型。 - 在模式中记录所有 AST 类型的详细信息。
- 根据模式生成代码并保存到文件中。
基础设施
更多细节待补充。
