GritQL [実験的機能]
GritQLは、ソースコードの構造検索を実行するためのクエリ言語です。 つまり、空白や、文字列で使用される引用符の種類などの些細な情報は、検索クエリでは無視されます。 さらに、スニペット、マッチング、ネスト、変数など、構文構造をクエリできる多くの機能も提供します。
GritQLはオープンソースであり、Grit.ioによって作成されました。
BiomeはGritQLを2つの目的で統合しています:
- IDE拡張機能にも拡張したいと考えている、
biome search
コマンド - 現在進行中の、プラグインへの取り組み
GritQLクエリは パターン を通じて機能します。 最もよく見られるパターンは、バッククォートで囲まれた通常のソースコードのように見えるコードスニペットです。
`console.log('Hello, world!')`
このパターンは、文字列 'Hello, world!'
が渡された全ての console.log()
の呼び出しに一致します。
ただし、GridQLは 構造的 マッチングを行うため、フォーマットの詳細には関心がありません。
これもマッチします:
console.log ( 'Hello, world!')
そして、これもマッチします(引用符が変化したことに注目してください):
console.log("Hello, world!")
GritQLクエリでは変数も使用できます。
次のクエリは渡されるメッセージに関係なく、全ての console.log()
呼び出しに一致します。
`console.log($message)`
これは、console
オブジェクトの任意のメソッドに一致します:
`console.$method($message)`
同じ変数名が1つのスニペット内で複数回出現することもできます。
`$fn && $fn()`
これは foo && foo()
や、foo.bar && foo.bar()
にもマッチしますが、foo && bar()
にはマッチしません。
where
演算子を使用してパターンに条件を追加できます。
これは通常、<:
マッチ演算子と一緒に使用されます:
`console.$method($message)` where { $method <: `log`}
このクエリは先ほど見た console.log($message)
パターンと同じですが、他の演算子を追加するとすぐに、さらに興味深いものになります:
`console.$method($message)` where { $method <: or { `log`, `info`, `warn`, `error` }}
言語ドキュメント
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プラグインのいずれかをサポートするプラグインに取り組んでいます。お楽しみに!