Kompatibilita s sg
vendor/bin/sg je obal kompatibilný so štýlom ast-grep. Prijíma najčastejšie používané prepínače ast-grep a opätovne využíva ten istý modul Greph\Ast\AstSearcher ako vendor/bin/greph -p. Overený rozsah vychádza zo skúšobných behov s pôvodným binárnym súborom sg a je uvedený v Rozšírené / Matica funkcií.
Kedy ho použiť
Obal použite, keď:
- Už máte nástroj, agenta alebo skript, ktorý volá
sg. - Chcete priamu náhradu použiteľnú v prostrediach, kde nemožno nainštalovať samotné
ast-grep. - Chcete pohodlné používanie ast-grep v inštalácii, ktorá obsahuje iba Composer.
Natívne vendor/bin/greph -p použite, keď:
- Píšete nový kód a nepotrebujete formát ast-grep CLI.
- Chcete rovnakú množinu prepínačov ako v textovom režime (natívny binárny súbor oba režimy spája).
Použitie
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
run je kanonické sloveso ast-grep. scan a rewrite sú aliasy dostupné iba v obaloch, ktoré kopírujú bežné používanie. Samotné zavolanie funguje ako jednorazové vyhľadávanie:
./vendor/bin/sg --pattern 'array($$$ITEMS)' src
Vzory
Gramatika vzorov je totožná s natívnym vyhľadávaním AST. Úplnú referenciu nájdete v časti Režimy / Vyhľadávanie AST.
./vendor/bin/sg run --pattern 'array($$$ITEMS)' src
./vendor/bin/sg run --pattern '$obj->$method($$$ARGS)' src
./vendor/bin/sg run --pattern 'new $CLASS()' src
Prepisovanie
Obal podporuje rovnaký pracovný postup pre skúšobné spustenie, interaktívne úpravy a zápis ako natívne prepisovanie, pričom používa názvy prepínačov ast-grep:
# Preview only (default)
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' src
# Apply without confirmation
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --update-all src
# Confirm each match
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --interactive src
# Wrapper-only aliases
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --interactive src
Výstup JSON
--json vytvára výstup v tvare ast-grep JSON. Podporované sú tri štýly:
./vendor/bin/sg run --json --pattern 'dispatch($EVENT)' src
./vendor/bin/sg run --json=stream --pattern 'dispatch($EVENT)' src
./vendor/bin/sg run --json=compact --pattern 'dispatch($EVENT)' src
| Štýl | Tvar |
|---|---|
--json (predvolený pretty) |
Jedno pekne naformátované pole JSON |
--json=stream |
Jedna zhoda na riadok, oddelené znakmi nového riadka JSON |
--json=compact |
Jedno kompaktné pole JSON |
Overený rozsah
Nasledujúce prepínače sú overené oproti pôvodnému binárnemu súboru sg v matica funkcií. Ak má prepínač dva zápisy (-p a --pattern, --glob a --globs), skúška používa jeden z nich a obal oba rozpozná ako rovnakú možnosť.
Prepínače vzorov
--pattern PATTERN(na najvyššej úrovni aj v rámcirun)-p PATTERN(alias)--rewrite TEMPLATE-r TEMPLATE--lang NAME,-l NAME
Prepínače zhody
--files-with-matches--json(pretty,stream,compact)--update-all,-U
Prepínače prechádzača
--no-ignore hidden(kombinovaný tvar)--glob GLOB,--globs GLOB
Prepínače pracovníkov
-j N,--threads N
Prijaté bez skúšobného overenia
Obal prijíma aj tieto prepínače, zatiaľ ich však neoveruje žiadna skúška matice funkcií:
- Samotné
--no-ignorealebo s hodnotou odlišnou odhidden --type NAME,--type-not NAME
Doplnkové možnosti dostupné iba v obale
Obal poskytuje niekoľko pomocných možností, ktoré samotné ast-grep nemá:
- Aliasy
scanarewriteprerun - Prepínač
--hidden(ast-grep zlučuje túto možnosť s--no-ignore hidden) - Alias
--dry-runna zobrazenie náhľadu prepisu - Postup na potvrdenie prepisu
--interactive
Obmedzenia
Obal Greph pre sg pokrýva funkcie štrukturálneho vyhľadávania a prepisovania, ktoré používajú najčastejšie nástroje a agenti. V súčasnosti neposkytuje nasledujúce funkcie ast-grep:
- Súbory pravidiel YAML (
--rule,--config) - Prehľadávanie vo viacerých jazykoch okrem PHP
- Transformátory, ktoré nepoužívajú vzory (
--debug-query,--inspect) - Integrácia s LSP
Ak vám chýba nejaký prepínač, nahláste problém spolu s výsledkom skúšky, ktorú ste vykonali voči pôvodnému sg, a očakávaným výstupom.
Zhoda správania
Obal sa zameriava na zhodu správania, nie na zhodu bajtov. Výstup je sémanticky ekvivalentný, no v kozmetických detailoch sa môže líšiť. Testy použité v matici funkcií kontrolujú zhodu polí dôležitých pre parser (cesta k súboru, číslo riadka, zachytený kód, zachytené hodnoty, tvar JSON), nie zhodu bajtového toku.