たとえば、oxc_ast
では数多のASTノードが公開されてる。
それらを列挙して一覧したい場合に、どういうやり方があるか?っていう。
ソースを見る案
最初に思いつくのはこれ。
https://github.com/oxc-project/oxc/blob/main/crates/oxc_ast/src/ast/js.rs
ただ、ファイルも分かれてるし、もちろん余分な情報もあるし、なによりmacroなんかがあると読みにくい。
docs.rsで見る案
https://docs.rs/oxc_ast/0.79.0/oxc_ast/ast/index.html#structs
イメージとしてはこれが一番近い。
けど、structの詳細は別ページになってたりと、一覧性がいまいち。
スクレイピングすればいいけど、できればしたくない・・・。
rust-analyzerを使う案
LSP経由でそういう情報を引き抜けるのでは・・・と思ったが、やり方がよくわからなかった。
というわけで
最終的に辿り着いたのが、cargo rustdoc
でcrateを指定し、なおかつJSONで出力させるという方法。
cargo +nightly rustdoc -p oxc_ast -Z unstable-options --output-format json
nightlyが必要な上にunstableという綱渡ではあるけど、これでJSONを用意して、それを整形する。
ちなみに、cargo doc
とcargo rustdoc
は、後者の方がよりプリミティブなAPIになってるらしい。
https://github.com/rust-lang/cargo/blob/840b83a10fb0e039a83f4d70ad032892c287570a/src/bin/cargo/commands/doc.rs https://github.com/rust-lang/cargo/blob/840b83a10fb0e039a83f4d70ad032892c287570a/src/bin/cargo/commands/rustdoc.rs
JSONは手に入ったが、とにかくデカくて構造もどうなってるのかイマイチわからんかったので、Claude様によしなにやらせた結果、こういうスクリプトになった。
そうして出力されたのがこれ。こういう作業にはAIがめちゃめちゃ便利よね。
欲しかったやつができた!