sg-kompatibilitás
A vendor/bin/sg ast-grep-stílusú kompatibilitási burkoló. Elfogadja a leggyakrabban használt ast-grep jelzőket, és ugyanazt a Greph\Ast\AstSearcher motort használja, mint a vendor/bin/greph -p. Az ellenőrzött felület a felsőbb szintű sg bináris fájllal végzett próbaeredmények alapján készült, és az Haladó / Funkciómátrix oldalon található.
Mikor használja
Akkor használja a burkolót, ha:
- Van egy meglévő eszköze, ügynöke vagy szkriptje, amely már a
sgeszközt hívja. - Olyan közvetlenül behelyettesíthető megoldást szeretne, amely olyan környezetben is működik, ahol magát a
ast-grepeszközt nem telepítheti. - Composer-alapú telepítésből szeretné élvezni a ast-grep használatának kényelmét.
Akkor használja a natív vendor/bin/greph -p eszközt, ha:
- Új kódot ír, és nincs szüksége a ast-grep CLI formátumára.
- A szöveges móddal megegyező jelzőkészletet szeretné használni (a natív bináris fájl egységesíti a kettőt).
Használat
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
A run a kanonikus ast-grep ige. A scan és a rewrite csak a burkolóban elérhető aliasok, amelyek a szokásos használatot követik. Az argumentum nélküli meghívás egyszeri keresésként is működik:
./vendor/bin/sg --pattern 'array($$$ITEMS)' src
Minták
A mintanyelvtan megegyezik a natív AST-keresésével. A teljes leírást lásd a Módok / AST-keresés oldalon.
./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
Átírások
A burkoló ugyanazt a próbaüzemű / interaktív / írási munkafolyamatot támogatja, mint a natív átírás, ast-grep jelzőnevekkel:
# 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
JSON kimenet
A --json ast-grep-formátumú JSON kimenetet állít elő. Három stílus támogatott:
./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
| Stílus | Formátum |
|---|---|
--json (alapértelmezett pretty) |
Egyetlen, szépen formázott JSON tömb |
--json=stream |
Soronként egy egyezés, újsorokkal elválasztott JSON |
--json=compact |
Egyetlen tömör JSON tömb |
Ellenőrzött felület
A következő jelzők ellenőrzése a felsőbb szintű sg bináris fájlon történt, a funkciómátrix szerint. Ha egy jelzőnek két alakja van (-p és --pattern, --glob és --globs), a próba ezek egyikét használja, a burkoló pedig mindkettőt ugyanazon beállításként értelmezi.
Mintajelzők
--pattern PATTERN(legfelső szinten és arunbelsejében)-p PATTERN(alias)--rewrite TEMPLATE-r TEMPLATE--lang NAME,-l NAME
Egyezési jelzők
--files-with-matches--json(pretty,stream,compact)--update-all,-U
Bejárási jelzők
--no-ignore hidden(kombinált forma)--glob GLOB,--globs GLOB
Munkásjelzők
-j N,--threads N
Próba nélkül elfogadott jelzők
A burkoló ezeket a jelzőket is elfogadja, de a funkciómátrix még nem tartalmaz hozzájuk próbát:
- A
--no-ignoreönmagában vagy ahiddenértéktől eltérő értékkel --type NAME,--type-not NAME
Csak a burkolóban elérhető kiegészítők
A burkoló néhány olyan segédeszközt is biztosít, amellyel maga a ast-grep nem rendelkezik:
scanésrewritealiasok a következőhöz:run--hiddenjelző (a ast-grep ezt a--no-ignore hiddenrészévé teszi)--dry-runátírási előnézet alias--interactiveátírás-megerősítési folyamat
Korlátozások
A Greph sg-burkolója a legtöbb eszköz és ügynök által használt strukturális keresési és átírási felületet biztosítja. Jelenleg a következő ast-grep funkciókat nem teszi elérhetővé:
- YAML szabályfájlok (
--rule,--config) - Többnyelvű vizsgálat a PHP nyelven túli nyelveken
- Nem mintaalapú átalakítók (
--debug-query,--inspect) - LSP-integráció
Ha hiányzó jelzőbe ütközik, nyisson hibajegyet az upstream sg ellen futtatott próbával és az elvárt kimenettel együtt.
Viselkedésbeli egyezés
A burkoló viselkedésbeli, nem pedig bájtszintű egyezésre törekszik. A kimenet szemantikailag egyenértékű, de kozmetikai részletekben eltérhet. A funkciómátrix próbái a parser szempontjából lényeges mezők (fájlútvonal, sorszám, rögzített kód, rögzítések, JSON formátuma) egyezését ellenőrzik, nem a bájtfolyam azonosságát.