コンテンツにスキップ

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` }
}

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プラグインのいずれかをサポートするプラグインに取り組んでいます。お楽しみに!