Kompatibilitet med sg
vendor/bin/sg er en kompatibilitetswrapper i stil med ast-grep. Den accepterer de mest almindeligt brugte flag fra ast-grep og genbruger den samme motor Greph\Ast\AstSearcher, som vendor/bin/greph -p bruger. De verificerede funktioner er genskabt ud fra testkørsler mod den oprindelige binære fil sg og findes i Avanceret / funktionsoversigt.
Hvornår skal den bruges
Brug wrapperen, når:
- Du har et eksisterende værktøj, en agent eller et script, der allerede kalder
sg. - Du ønsker en drop-in-erstatning, der fungerer i miljøer, hvor du ikke kan installere
ast-grep. - Du ønsker en ast-grep-arbejdsgang fra en installation, der kun indeholder Composer.
Brug native vendor/bin/greph -p, når:
- Du skriver ny kode og ikke har brug for formen ast-grep CLI.
- Du vil have samme sæt flag som i teksttilstand (den native binære fil samler begge tilstande).
Brug
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
run er den kanoniske kommando for ast-grep. scan og rewrite er aliaser, der kun findes i wrapperen, og som afspejler almindelig brug. Det fungerer også at køre kommandoen uden argumenter for at søge én gang:
./vendor/bin/sg --pattern 'array($$$ITEMS)' src
Mønstre
Grammatikken for mønstre er identisk med den native AST-søgning. Se Tilstande / AST-søgning for den fulde reference.
./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
Omskrivninger
Wrapperen understøtter samme arbejdsgang med prøvekørsel, interaktion og skrivning som den native omskrivning, med flagnavne fra 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
JSON-output
--json udsender ast-grep-formede JSON. Der understøttes tre formater:
./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
| Format | Form |
|---|---|
--json (standard pretty) |
Én pænt formateret JSON-array |
--json=stream |
Ét match pr. linje, linjeafgrænset JSON |
--json=compact |
Ét kompakt JSON-array |
Verificerede funktioner
Følgende flag er verificeret mod den oprindelige binære fil sg i funktionsoversigten. Hvis et flag har to skrivemåder (-p og --pattern, --glob og --globs), bruger testen en af dem, og wrapperen fortolker begge som den samme indstilling.
Mønsterflag
--pattern PATTERN(på øverste niveau og inde irun)-p PATTERN(alias)--rewrite TEMPLATE-r TEMPLATE--lang NAME,-l NAME
Matchflag
--files-with-matches--json(pretty,stream,compact)--update-all,-U
Flag for filgennemgang
--no-ignore hidden(kombineret form)--glob GLOB,--globs GLOB
Arbejderflag
-j N,--threads N
Accepteret uden test
Wrapperen accepterer også disse flag, men de er endnu ikke dækket af en test i funktionsoversigten:
--no-ignorealene eller med en anden værdi endhidden--type NAME,--type-not NAME
Ekstra indstillinger kun til wrapperen
Wrapperen stiller nogle få hjælpefunktioner til rådighed, som selve ast-grep ikke har:
scan- ogrewrite-aliaser tilrun- Flaget
--hidden(ast-grep samler dette under--no-ignore hidden) --dry-run-alias til forhåndsvisning af omskrivninger--interactive-arbejdsgang til bekræftelse af omskrivninger
Begrænsninger
Wrapperen sg til Greph dækker de strukturelle søge- og omskrivningsfunktioner, som de fleste værktøjer og agenter bruger. Den stiller i øjeblikket ikke følgende funktioner fra ast-grep til rådighed:
- Regel-filer fra YAML (
--rule,--config) - Søgning i flere sprog ud over PHP
- Transformere, der ikke bruger mønstre (
--debug-query,--inspect) - LSP-integration
Hvis du støder på et manglende flag, kan du oprette en sag med den test, du kørte mod den oprindelige sg, og det forventede output.
Adfærdsmæssig overensstemmelse
Wrapperen tilstræber adfærdsmæssig overensstemmelse, ikke byte-for-byte-overensstemmelse. Outputtet er semantisk ækvivalent, men kosmetiske detaljer kan variere. Testene i funktionsoversigten kontrollerer, at de parserrelevante felter (filsti, linjenummer, registreret kode, registreringer, JSON-form) er ækvivalente, ikke at bytestrømmen er identisk.