GritQL [EXPÉRIMENTAL]
GritQL est un langage de requête pour effectuer des recherches structurelles dans du code source, ce qui veut dire que les futilités comme les espaces, ou même le type de guillemets utilisé dans les chaînes de caractères, seront ignorées dans votre requête. En outre, il offre beaucoup de fonctionnalités qui vous permettent d’effectuer des requêtes sur la structure de la syntaxe comme les snippets, les correspondances, les imbrications et les variables.
GritQL est open source et est créé par Grit.io.
Biome intègre GritQL pour deux objectifs :
- la commande
biome search
, que nous espérons étendre aussi à nos extensions pour IDE, - nos efforts en cours en matière de plug-in.
Modèles
Section titled ModèlesLes requêtes GritQL fonctionnent à travers des modèles. Le modèle le plus fréquent que vous verrez est le snippet de code, qui ressemble à du code source ordinaire entouré de backticks :
`console.log('Hello, world!')`
Ce modèle trouvera n’importe quel appel à console.log()
se voyant passer la chaîne
'Hello, world!'
. Mais, parce que GritQL pratique la correspondance structurelle, il ne
tient pas compte des détails de formatage. Il trouve également :
console.log ( 'Hello, world!')
Il en est de même pour le code suivant (notez le changement dans les guillemets) :
console.log("Hello, world!")
Variables
Section titled VariablesLes requêtes GritQL peuvent également avoir des variables. La requête suivante trouvera n’importe quel appel à
console.log()
, indépendamment du message passé :
`console.log($message)`
Cette requête trouvera aussi n’importe quelle méthode de l’objet console
:
`console.$method($message)`
Le même nom de variable peut être utilisé plusieurs fois dans un même snippet :
`$fn && $fn()`
Cette requête trouvera foo && foo()
, voire foo.bar && foo.bar()
, mais pas
foo && bar()
.
Conditions
Section titled ConditionsVous pouvez ajouter des conditions aux modèles en utilisant l’opérateur where
, qui est
couramment utilisé avec l’opérateur match, <:
:
`console.$method($message)` where { $method <: `log`}
Cette requête est identique au modèle console.log($message)
que nous avons vu plus haut,
mais devient vite plus intéressant avec l’ajout d’autres opérateurs :
`console.$method($message)` where { $method <: or { `log`, `info`, `warn`, `error` }}
Documentation du langage
Section titled Documentation du langagePour plus de renseignements sur GritQL et sa syntaxe, voir la documentation du langage de GritQL officielle.
Veuillez garder à l’esprit que Biome ne prend pas (encore) en charge la totalité des fonctionnalités de Grit.
État d’intégration
Section titled État d’intégrationLa prise en charge de GritQL dans Biome est en développement actif. Beaucoup de choses fonctionnent déjà ; mais, il faut encore s’attendre à des bugs et certaines fonctionnalités manquent franchement encore.
Pour un aperçu détaillé des fonctionnalités de GritQL prises en charge et de celles dont la prise en charge est encore en cours, veuillez voir le ticket sur GitHub : https://github.com/biomejs/biome/issues/2582.
Nous avons également une RFC détaillée qui guide la direction à prendre pour nos efforts en matière de plug-in : https://github.com/biomejs/biome/discussions/1762.
tl;dr : Nous travaillons sur la prise en charge des plug-ins, qui peuvent être des plug-ins en pur GritQL ou des plug-ins en JS/TS utilisant GritQL pour sélectionner le code sur lequel ils souhaitent opérer. Restez à l’écoute !