跳至內容

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:codegen AST 相關程式碼中討論了這個主題,並就以下要求和使用者故事達成一致

要求

  • 沒有發佈給使用者的 build.rs。
  • 所有產生的程式碼都簽入 git。
  • 沒有 nightly 版本。
  • Rust 程式碼是事實的來源,需要解析標記為 #[ast] 的類型。
  • 盡可能避免編譯時程序宏。

工作流程

  • 使用者變更了儲存庫中的程式碼。
  • 監看變更會偵測到它。
  • 解析所有標記為 #[ast] 的類型。
  • 在綱要中記錄所有 AST 類型的詳細資訊。
  • 從綱要產生程式碼並儲存到檔案。

基礎設施

更多詳細資訊稍後提供。

依據 MIT 授權發布。