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。
- 沒有 nightly 版本。
- Rust 程式碼是事實的來源,需要解析標記為
#[ast]
的類型。 - 盡可能避免編譯時程序宏。
工作流程
- 使用者變更了儲存庫中的程式碼。
- 監看變更會偵測到它。
- 解析所有標記為
#[ast]
的類型。 - 在綱要中記錄所有 AST 類型的詳細資訊。
- 從綱要產生程式碼並儲存到檔案。
基礎設施
更多詳細資訊稍後提供。