Kompatibilita s sg
vendor/bin/sg je wrapper kompatibilní se stylem ast-grep. Přijímá nejčastěji používané příznaky ast-grep a znovu používá stejný engine Greph\Ast\AstSearcher, který používá vendor/bin/greph -p. Ověřené možnosti vycházejí z testovacích běhů s upstreamovým binárním souborem sg a jsou uvedeny v Rozšířené funkce / Matice funkcí.
Kdy jej použít
Wrapper použijte, když:
- Máte existující nástroj, agenta nebo skript, který už spouští
sg. - Chcete přímou náhradu, která funguje v prostředích, kde nelze nainstalovat samotný
ast-grep. - Chcete pohodlí ast-grep v instalaci, která obsahuje pouze Composer.
Nativní vendor/bin/greph -p použijte, když:
- Píšete nový kód a nepotřebujete rozhraní ast-grep CLI.
- Chcete používat stejnou sadu příznaků jako v textovém režimu (nativní binární soubor oba režimy sjednocuje).
Použití
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
run je kanonický příkaz ast-grep. scan a rewrite jsou pouze aliasy wrapperu, které odpovídají běžnému použití. Funguje i samotné spuštění jako jednorázové vyhledávání:
./vendor/bin/sg --pattern 'array($$$ITEMS)' src
Vzory
Gramatika vzorů je totožná s nativním vyhledáváním v AST. Úplné informace najdete v části Režimy / Vyhledávání v AST.
./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
Přepisy
Wrapper podporuje stejný pracovní postup nanečisto / interaktivní / zápis jako nativní přepis; používá názvy příznaků 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
Výstup JSON
--json vydává ast-grep ve formátu JSON. Podporuje tři styly:
./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
| Styl | Formát |
|---|---|
--json (výchozí pretty) |
Jediné hezky formátované pole JSON |
--json=stream |
Jedna shoda na řádek, data JSON oddělená novým řádkem |
--json=compact |
Jediné kompaktní pole JSON |
Ověřené možnosti
Následující příznaky jsou ověřeny proti upstreamovému binárnímu souboru sg v matici funkcí. Má-li příznak dva zápisy (-p a --pattern, --glob a --globs), test používá jeden z nich a wrapper oba zpracuje jako tutéž volbu.
Příznaky vzoru
--pattern PATTERN(na nejvyšší úrovni i uvnitřrun)-p PATTERN(alias)--rewrite TEMPLATE-r TEMPLATE--lang NAME,-l NAME
Příznaky shody
--files-with-matches--json(pretty,stream,compact)--update-all,-U
Příznaky procházení
--no-ignore hidden(kombinovaná forma)--glob GLOB,--globs GLOB
Příznaky pracovníků
-j N,--threads N
Přijímané bez testu
Wrapper přijímá také následující příznaky, na které se zatím nevztahuje žádný test matice funkcí:
--no-ignoresamostatně nebo s jinou hodnotou nežhidden--type NAME,--type-not NAME
Další možnosti pouze ve wrapperu
Wrapper nabízí několik pomocných možností, které samotné ast-grep nemá:
- Aliasy
scanarewriteprorun - Příznak
--hidden(ast-grep jej zahrnuje do--no-ignore hidden) - Alias
--dry-runpro náhled přepisu - Průběh potvrzení přepisu
--interactive
Omezení
Wrapper sg pro Greph pokrývá možnosti strukturálního vyhledávání a přepisu, které využívá většina nástrojů a agentů. V současnosti nezpřístupňuje tyto funkce ast-grep:
- Soubory pravidel YAML (
--rule,--config) - Prohledávání více jazyků kromě PHP
- Transformátory, které nepoužívají vzory (
--debug-query,--inspect) - Integrace LSP
Pokud narazíte na chybějící příznak, založte hlášení a přiložte test provedený proti upstreamovému sg i očekávaný výstup.
Shoda chování
Cílem wrapperu je shoda chování, nikoli shoda po bajtech. Výstup je sémanticky rovnocenný, ale může se lišit v kosmetických detailech. Testy použité v matici funkcí ověřují shodu polí důležitých pro parser (cesta k souboru, číslo řádku, zachycený kód, zachycené hodnoty, struktura JSON), nikoli bajtového proudu.