Compatibiliteit met sg
vendor/bin/sg is een compatibiliteitswrapper in de stijl van ast-grep. De wrapper accepteert de meestgebruikte ast-grep-vlaggen en hergebruikt dezelfde Greph\Ast\AstSearcher-engine als vendor/bin/greph -p. De geverifieerde mogelijkheden zijn overgenomen uit tests met de upstream-binary sg en staan in Geavanceerd / Functiematrix.
Wanneer gebruik je deze?
Gebruik de wrapper wanneer:
- Je een bestaande tool, agent of script hebt dat al
sgaanroept. - Je een direct inzetbare vervanging wilt die werkt in omgevingen waar je
ast-grepzelf niet kunt installeren. - Je het gebruiksgemak van ast-grep wilt bij een installatie waarop alleen Composer beschikbaar is.
Gebruik de native vendor/bin/greph -p wanneer:
- Je nieuwe code schrijft en de ast-grep-vorm van CLI niet nodig hebt.
- Je dezelfde vlaggenset wilt als in de tekstmodus (de native binary verenigt beide).
Gebruik
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
run is het canonieke ast-grep-commando. scan en rewrite zijn aliassen die alleen in de wrapper beschikbaar zijn en gangbaar gebruik weerspiegelen. Een aanroep zonder argumenten werkt als een eenmalige zoekopdracht:
./vendor/bin/sg --pattern 'array($$$ITEMS)' src
Patronen
De patroongrammatica is identiek aan die van native AST-zoeken. Zie Modi / AST-zoeken voor de volledige referentie.
./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
Herschrijvingen
De wrapper ondersteunt dezelfde workflow voor proefuitvoering, interactieve bewerking en wegschrijven als native herschrijven, met vlaggen met ast-grep als naam:
# 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
Uitvoer van JSON
--json genereert ast-grep-vormige JSON. Er worden drie stijlen ondersteund:
./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
| Stijl | Vorm |
|---|---|
--json (standaard pretty) |
Eén fraai opgemaakte JSON-array |
--json=stream |
Eén overeenkomst per regel, met newlines gescheiden JSON |
--json=compact |
Eén compacte JSON-array |
Geverifieerde mogelijkheden
De volgende vlaggen zijn geverifieerd met de upstream-binary sg in de functiematrix. Als een vlag twee schrijfwijzen heeft (-p en --pattern, --glob en --globs), gebruikt de test er één en verwerkt de wrapper beide als dezelfde optie.
Patroonvlaggen
--pattern PATTERN(op hoofdniveau en binnenrun)-p PATTERN(alias)--rewrite TEMPLATE-r TEMPLATE--lang NAME,-l NAME
Vlaggen voor overeenkomsten
--files-with-matches--json(pretty,stream,compact)--update-all,-U
Vlaggen voor het doorlopen van bestanden
--no-ignore hidden(gecombineerde vorm)--glob GLOB,--globs GLOB
Vlaggen voor workers
-j N,--threads N
Geaccepteerd zonder test
De wrapper accepteert deze vlaggen ook, maar er is nog geen functiematrixtest voor:
--no-ignoreop zichzelf, of met een andere waarde danhidden--type NAME,--type-not NAME
Extra opties van de wrapper
De wrapper biedt enkele hulpfuncties die ast-grep zelf niet heeft:
- Aliassen
scanenrewritevoorrun - Vlag
--hidden(ast-grep voegt dit samen met--no-ignore hidden) --dry-run-alias voor een voorbeeldweergave van herschrijvingen- Bevestigingsworkflow voor herschrijvingen met
--interactive
Beperkingen
De sg-wrapper van Greph omvat de structurele zoek- en herschrijffuncties die de meeste tools en agents gebruiken. Deze biedt momenteel geen ondersteuning voor de volgende functies van ast-grep:
- Regelbestanden voor YAML (
--rule,--config) - Scans met meerdere talen buiten PHP
- Transformers die geen patronen gebruiken (
--debug-query,--inspect) - Integratie met LSP
Als je een ontbrekende vlag tegenkomt, dien dan een issue in met de test die je op de upstream-sg hebt uitgevoerd en de verwachte uitvoer.
Gedragspariteit
De wrapper streeft naar gedragspariteit, niet naar bytepariteit. De uitvoer is semantisch gelijkwaardig, maar kan cosmetisch verschillen. De tests voor de functiematrix controleren of de parserrelevante velden (bestandspad, regelnummer, vastgelegde code, captures, vorm van JSON) overeenkomen, niet de bytestroom.