Hoppa till innehåll

Kompatibilitet med sg

vendor/bin/sg är ett kompatibilitetsomslag i ast-grep-stil. Det tar emot de vanligaste flaggorna i ast-grep och återanvänder samma Greph\Ast\AstSearcher-motor som vendor/bin/greph -p använder. De verifierade funktionerna är återgivna från testkörningar mot uppströmsversionens binärfil sg och finns i Avancerat / funktionsmatris.

När du ska använda det

Använd omslaget när:

  • Du har ett befintligt verktyg, en agent eller ett skript som redan anropar sg.
  • Du vill ha en direkt ersättare som fungerar i miljöer där du inte kan installera ast-grep självt.
  • Du vill ha ast-grep-ergonomi från en installation med endast Composer.

Använd inbyggda vendor/bin/greph -p när:

  • Du skriver ny kod och inte behöver formen ast-grep CLI.
  • Du vill ha samma flagguppsättning som i textläge (den inbyggda binärfilen förenar båda).

Användning

Shell
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]

run är det kanoniska ast-grep-kommandot. scan och rewrite är alias som endast finns i omslaget och speglar vanligt bruk. Det går att köra kommandot utan argument för en engångssökning:

Shell
./vendor/bin/sg --pattern 'array($$$ITEMS)' src

Mönster

Grammatiken för mönster är identisk med den inbyggda AST-sökningen. Se Lägen / AST-sökning för den fullständiga referensen.

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

Omskrivningar

Omslaget stöder samma arbetsflöde med torrkörning, interaktiv körning och skrivning som den inbyggda omskrivningen, med flaggnamn i ast-grep:

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

Utdata från JSON

--json skickar ut ast-grep-formade JSON. Tre format stöds:

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
Format Struktur
--json (standard: pretty) En enda snyggt formaterad JSON-array
--json=stream En matchning per rad, avgränsad med radbrytningar JSON
--json=compact En enda kompakt JSON-array

Verifierade funktioner

Följande flaggor har verifierats mot uppströmsversionens binärfil sg i funktionsmatrisen. Om en flagga har två stavningar (-p och --pattern, --glob och --globs) använder testet den ena, och omslaget tolkar båda som samma alternativ.

Mönsterflaggor

  • --pattern PATTERN (på toppnivå och inuti run)
  • -p PATTERN (alias)
  • --rewrite TEMPLATE
  • -r TEMPLATE
  • --lang NAME, -l NAME

Matchningsflaggor

  • --files-with-matches
  • --json (pretty, stream, compact)
  • --update-all, -U

Genomsökningsflaggor

  • --no-ignore hidden (kombinerad form)
  • --glob GLOB, --globs GLOB

Arbetarflaggor

  • -j N, --threads N

Accepteras utan test

Omslaget accepterar även dessa flaggor, men ingen testkörning för funktionsmatrisen täcker dem ännu:

  • --no-ignore för sig, eller med ett annat värde än hidden
  • --type NAME, --type-not NAME

Extra funktioner endast i omslaget

Omslaget erbjuder några hjälpfunktioner som ast-grep självt saknar:

  • Aliasen scan och rewrite för run
  • Flaggan --hidden (ast-grep inkluderar den i --no-ignore hidden)
  • Alias för förhandsgranskning av omskrivningar: --dry-run
  • Flöde för att bekräfta omskrivningar med --interactive

Begränsningar

Omslaget för Greph sg täcker de strukturella sök- och omskrivningsfunktioner som används av de flesta verktyg och agenter. Följande ast-grep-funktioner är för närvarande inte tillgängliga:

  • Regel-filer för YAML (--rule, --config)
  • Genomsökning av flera språk utöver PHP
  • Transformering utan mönster (--debug-query, --inspect)
  • LSP-integration

Om du stöter på en flagga som saknas kan du skapa ett ärende med testkörningen du gjorde mot uppströmsversionen av sg och den förväntade utdatan.

Beteendeparitet

Omslaget eftersträvar beteendeparitet, inte byteparitet. Utdata är semantiskt likvärdig men kan skilja sig i kosmetiska detaljer. Testerna i funktionsmatrisen kontrollerar att parserrelevanta fält (filsökväg, radnummer, fångad kod, fångster, strukturen för JSON) är likvärdiga, inte att byteströmmen är identisk.