GritQL [実験的機能]
GritQLは、ソースコードの構造検索を実行するためのクエリ言語です。 つまり、空白や、文字列で使用される引用符の種類などの些細な情報は、検索クエリでは無視されます。 さらに、スニペット、マッチング、ネスト、変数など、構文構造をクエリできる多くの機能も提供します。
GritQLはオープンソースであり、Grit.ioによって作成されました。
BiomeはGritQLを2つの目的で統合しています:
- IDE拡張機能にも拡張したいと考えている、
biome search
コマンド - 現在進行中の、プラグインへの取り組み
GritQLクエリは パターン を通じて機能します。 最もよく見られるパターンは、バッククォートで囲まれた通常のソースコードのように見えるコードスニペットです。
このパターンは、文字列 'Hello, world!'
が渡された全ての console.log()
の呼び出しに一致します。
ただし、GridQLは 構造的 マッチングを行うため、フォーマットの詳細には関心がありません。
これもマッチします:
そして、これもマッチします(引用符が変化したことに注目してください):
GritQLクエリでは変数も使用できます。
次のクエリは渡されるメッセージに関係なく、全ての console.log()
呼び出しに一致します。
これは、console
オブジェクトの任意のメソッドに一致します:
同じ変数名が1つのスニペット内で複数回出現することもできます。
これは foo && foo()
や、foo.bar && foo.bar()
にもマッチしますが、foo && bar()
にはマッチしません。
where
演算子を使用してパターンに条件を追加できます。
これは通常、<:
マッチ演算子と一緒に使用されます:
このクエリは先ほど見た console.log($message)
パターンと同じですが、他の演算子を追加するとすぐに、さらに興味深いものになります:
言語ドキュメント
Section titled 言語ドキュメントGritQLとその構文については、公式の GritQL 言語ドキュメントを参照してください。
BiomeはGritの全ての機能を(まだ)サポートしていないことに注意してください。
BiomeはGritQLサポートに積極的に取り組んでいます。 多くの機能がすでに動作していますが、バグがまだ発生することが予想され、一部の機能はまだ完全に欠落しています。
サポートされているGritQLの機能と、まだ進行中の機能の詳細な概要については、GitHubのIssueを参照してください: https://github.com/biomejs/biome/issues/2582
プラグインの取り組みの方向性を示す詳細なRFCもあります: https://github.com/biomejs/biome/discussions/1762
まとめ: 私たちは、純粋なGritQLプラグイン、またはGritQLを使用して操作したいコードを選択するJS/TSプラグインのいずれかをサポートするプラグインに取り組んでいます。お楽しみに!