Prettierのコードを読んだなら、BiomeのFormatterのコードも読んでみたい・・・が、その前にちょっと調べ物。
去年かな?Prettierと95%以上の互換性を持つRust製のツールに賞金が出るぞチャレンジがあって、それを勝ち取ったのがBiomeだった。
The Prettier Challenge | Algora https://console.algora.io/challenges/prettier
というわけで、だいぶ今さらではあるし疑うわけでもないけど、あのPrettierのコードを読んだ後だと、95%って本当に可能なんか?!って気持ちでいっぱいなので、その実態も調べておきたいと思い。
Challenge specs
このチャレンジのルールをみると、
Winning the Grand Prize requires passing > 95% of the prettier JavaScript tests. The scope for the challenge is JavaScript — only ES6 syntax is required. TypeScript, GraphQL, CSS, or any other embedded language or unstable syntax are out of scope for the challenge. All formatting options must be supported.
ということで、ES6なJSだけ対応すればいいということらしい。
互換性のレポート
https://github.com/biomejs/biome/blob/main/crates/biome_js_formatter/report-challenge.md
ここにまとまってる。
https://github.com/biomejs/biome/blob/main/crates/biome_js_formatter/report-es2015.md https://github.com/biomejs/biome/blob/main/crates/biome_js_formatter/report-es2024+.md
この2ファイルが詳細で、スナップショットと差分がわかるようになってて、どっちも96-97%と高い互換性。
で、やはりignoreしてるテストもあるようで、思ってたよりもいろいろignoreされてて安心した。
(ちゃんと数えてないけど、100ファイルはいかないけど50ファイルくらいには届くかも?くらい?)
いくつかはBiomeが意図して差分とするがゆえに、ignoreしてるものもあるとのこと。
☂️ Prettier Divergence collection from the Prettier challenge · Issue #739 · biomejs/biome https://github.com/biomejs/biome/issues/739
レポート生成の流れ
ここに書いてあった。
- Prettierのリポジトリを持ってきて、手動でスナップショットを再生成
- Biome Formatterの実行結果とdiffしてレポート生成
なるほど。
ちなみに、互換性の計算ロジックはこうなってるらしい。
📎 Prettier Compatibility Metric · Issue #2555 · rome/tools https://github.com/rome/tools/issues/2555#issuecomment-1124787893
あの頃はまだRomeだったのね。