GritQL
GritQL to język zapytań do wykonywania strukturalnych wyszukiwań w kodzie źródłowym. Oznacza to, że szczegóły takie jak białe znaki lub nawet typ cudzysłowów używanych w ciągach będą ignorowane w twoim zapytaniu wyszukiwania. Dodatkowo oferuje wiele funkcji, które pozwalają na zapytania o strukturę składni, takie jak fragmenty, dopasowanie, zagnieżdżanie i zmienne.
GritQL jest open-source i został stworzony przez Grit.io.
Biome używa GritQL do dwóch celów:
- Wtyczki analizatora.
- Polecenie
biome search, które mamy nadzieję rozszerzyć również do naszych rozszerzeń IDE.
Zapytania GritQL działają poprzez wzorce. Najczęstszym wzorcem, który zobaczysz, jest fragment kodu, który wygląda jak zwykły kod źródłowy owinięty w backticki:
`console.log('Hello, world!')`Ten wzorzec dopasuje każde wywołanie console.log(), któremu przekazano ciąg
'Hello, world!'. Ale ponieważ GritQL wykonuje strukturalne dopasowanie, nie
zależy mu na szczegółach formatowania. To również pasuje:
console.log ( 'Hello, world!')I to również (zauważ zmianę w cudzysłowach):
console.log("Hello, world!")Zmienne
Dział zatytułowany „Zmienne”Zapytania GritQL mogą również mieć zmienne. Następujące dopasuje każde wywołanie
console.log() niezależnie od przekazanego komunikatu:
`console.log($message)`To również dopasuje dowolną z metod na obiekcie console:
`console.$method($message)`Ta sama nazwa zmiennej może wystąpić wiele razy w jednym fragmencie:
`$fn && $fn()`To dopasuje foo && foo(), a nawet foo.bar && foo.bar(), ale nie
foo && bar().
Warunki
Dział zatytułowany „Warunki”Możesz dodać warunki do wzorców używając operatora where. Jest to
często używane razem z operatorem dopasowania, <::
`console.$method($message)` where { $method <: `log`}To zapytanie jest identyczne ze wzorcem console.log($message), który widzieliśmy wcześniej,
ale staje się szybko bardziej interesujące, gdy dodamy inne operatory do mieszanki:
`console.$method($message)` where { $method <: or { `log`, `info`, `warn`, `error` }}Dopasowywanie węzłów składni Biome
Dział zatytułowany „Dopasowywanie węzłów składni Biome”Dla bardziej precyzyjnych zapytań możesz dopasować bezpośrednio do wewnętrznych węzłów składni Biome. Każdy węzeł jest identyfikowany przez unikalną nazwę PascalCase.
Na przykład, aby znaleźć wszystkie instrukcje JavaScript if, możesz dopasować węzeł JsIfStatement:
engine biome(1.0)language js(typescript,jsx)
JsIfStatement() as $stmt where { register_diagnostic( span=$stmt, message="Found an if statement" )}Możesz odkryć nazwy węzłów dla swojego kodu, eksplorując drzewo składni w Biome Playground. Pełna lista wszystkich dostępnych węzłów jest również dostępna w plikach .ungram w katalogu xtask/codegen repozytorium Biome.
Dokumentacja języka
Dział zatytułowany „Dokumentacja języka”Aby uzyskać więcej informacji o GritQL i jego składni, zobacz oficjalną Dokumentację języka GritQL.
Proszę pamiętać, że Biome nie obsługuje jeszcze wszystkich funkcji Grit.
Status integracji
Dział zatytułowany „Status integracji”Obsługa GritQL w Biome jest aktywnie rozwijana. Wiele rzeczy już działa, ale nadal można oczekiwać błędów, a niektóre funkcje są nadal całkowicie brakujące.
Aby uzyskać szczegółowy przegląd, które funkcje GritQL są obsługiwane, a które są nadal w trakcie, zobacz issue na GitHubie: https://github.com/biomejs/biome/issues/2582.
Mamy również szczegółowy RFC, który kieruje kierunkiem naszych wysiłków związanych z wtyczkami: https://github.com/biomejs/biome/discussions/1762
tl;dr: Pracujemy nad obsługą wtyczek, które mogą być albo czystymi wtyczkami GritQL albo wtyczkami JS/TS, które używają GritQL do wyboru kodu, na którym chcą działać. Bądźcie czujni!
Copyright (c) 2023-present Biome Developers and Contributors.