Ga naar de inhoud

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 sg aanroept.
  • Je een direct inzetbare vervanging wilt die werkt in omgevingen waar je ast-grep zelf 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

Shell
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:

Shell
./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.

Shell
./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:

Shell
# 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:

Shell
./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 binnen run)
  • -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-ignore op zichzelf, of met een andere waarde dan hidden
  • --type NAME, --type-not NAME

Extra opties van de wrapper

De wrapper biedt enkele hulpfuncties die ast-grep zelf niet heeft:

  • Aliassen scan en rewrite voor run
  • 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.