AIのせいでちゃんと書く気が起きないのでざっくり。
Experimental Rust compiler | Docs https://docs.astro.build/en/reference/experimental-flags/rust-compiler/
今までGoで書かれてたけど、Rustにするよってやつ。
A new compiler for Astro · withastro/roadmap · Discussion #1306 https://github.com/withastro/roadmap/discussions/1306
先月リリースされたAstroのv6から利用できるようになってる、experimentalな機能。
withastro/compiler-rs
withastro/compiler-rs: The Astro compiler https://github.com/withastro/compiler-rs
どうやらこのリポジトリが、コンパイラーとしての表向きの実装らしい。 TSから使えるように、napi-rsでビルドしてる。
- ASTのJSONを返す
parse() - コンパイルしてメタデータ化する
transform()
この2つがAPIとして公開されてる。
肝心のparserとかの実装がないな?って思ったら、それは別になってた。
withastro/oxc
withastro/oxc at feat/astro https://github.com/withastro/oxc/tree/feat/astro
それがこっちで、なんと我らがOxcリポジトリのforkだった。
Astro対応をいれたブランチがそのままPRとしても見えるようになってる。
feat: some sort of Astro support by Princesseuh · Pull Request #2 · withastro/oxc https://github.com/withastro/oxc/pull/2
変更としては、
- oxc_span:
SourceType::Astro - oxc_ast: Astro関連のASTを追加
AstroRootAstroFrontMatterAstroScriptAstroDoctypeAstroComment
- oxc_parser: Astro関連のパースロジックの追加
- 既存の
parse()の隣に、parse_astro()が生えてる cfg(feature = "astro")されてる- AstroはJSXライクでありJSXではないので、Lexerから手を入れ直してる
- 既存の
というあたり。
<style>はパースせず、単なるJSXElementとして中身はそのまま保持。compiler-rs側でspanから切り出して、別の実装に投げてた。
当時から、Oxcベースってのは知ってたけど、oxc_allocatorとかそういう公開crateを使って、独自に実装してるんだと勝手に思い込んでた。
実際は、がっつりリポジトリごとforkして実装されてた!
Erikaさん一人でやってる風ではあるが、どういうステータスなんだろうか。MDXパーサーとかもやってて忙しそうではある。
formatter対応もあった
feat: add support for formatting Astro files by Princesseuh · Pull Request #5 · withastro/oxc https://github.com/withastro/oxc/pull/5
この流れならそりゃあ当然ではあるが、oxc_formatterのJS/TSXを扱うコードの中に、AstroのJSXライクなテンプレ処理が織り込まれてる。
これが完全なJSXだったなら、こんな苦労はなかったとも思いつつ、まぁいろいろあるわな〜。
さて、つぎはTSRX対応のことを考えないといけないのだろうか・・・。
TSRX | TypeScript Language Extension for Declarative UI https://tsrx.dev/