Closed7

RFC: Biome Plugins Proposalを読む

mehm8128mehm8128

GritQL

https://docs.grit.io/

ドキュメント翻訳したときにちょっと触ったので雰囲気は知ってる
https://biomejs.dev/ja/reference/gritql/

console.log("Hello world!");

だったり、

`$path && $path()` => `$path?.()`

のようなクエリを使うことでソースコードにマッチさせたり、マッチしたコードに変換処理を施したりできるやつ

ESLintのルール作るときみたいに、AST見て「これがExpressionStatementだからなんたら~」みたいな書き方をするのではないので、クエリを書くやり方でどこまでできるのかがかなり気になってる

ast-grepとかとの比較も書かれてる

「GritQL in Biome」のセクションでは、実際にnoImplicitBooleanのルールをGritQLを使ってどのように実装できるかの例が書かれている

このくらいのルールなら確かにこのくらいで書けるけど、複雑なルールのときに同じように書けるのかな

mehm8128mehm8128

JS/TS plugins

GritQLではなくてJS/TSを用いたプラグインの作成方法。この場合はASTを見て色々する
一番の問題はパフォーマンス。Biomeはそもそもパフォーマンスが1番の売りなので、パフォーマンスが低下するようなものは避けたいとのこと
JS/TSで書かれたものでも、人気のあるプラグインはRust化して本体に統合される可能性もあるらしい

「Linter API」のセクションでさっきのnoImplicitBooleanを、今度はJSで実装した例が書かれている
JsxAttributeというASTに入ったときの処理を書いていることが分かる

「Transformation API」セクション
JSでAST見て分岐すると複雑になる場合に、JSからGritQLのクエリを呼び出すことできる。この場合Rust側で実行してくれるので、パフォーマンス的にもいいらしい。さらに、JSからクエリを呼び出しているので部分的にJSも使いつつGritQLも使いつつみたいなことができるらしい?

But meanwhile developers writing their own rules or transformations still have the full flexibility of JavaScript available in processing the matches.

mehm8128mehm8128

Choice of Engine

エンジンの話詳しくないのでパスで

mehm8128mehm8128

簡単なルールであればGritQLの方が簡単に書けそうだけど、逆に既存のルールをGritQLで書くようにしたりってしないのかな

このスクラップは2025/01/26にクローズされました