sg Uyumluluğu
vendor/bin/sg, ast-grep tarzı bir uyumluluk sarmalayıcısıdır. En sık kullanılan ast-grep bayraklarını kabul eder ve vendor/bin/greph -p'ün kullandığı Greph\Ast\AstSearcher motorunu kullanır. Doğrulanmış kapsam, üst kaynak sg ikili dosyasına karşı yürütülen denemelerden elde edilmiştir ve Gelişmiş / Özellik Matrisi bölümünde yer alır.
Ne zaman kullanılır?
Sarmalayıcıyı şu durumlarda kullanın:
sgçağıran mevcut bir aracınız, ajanınız veya betiğiniz varsa.ast-grep'i yükleyemediğiniz ortamlarda çalışan, doğrudan kullanılabilir bir alternatif istiyorsanız.- Yalnızca Composer kurulumundan ast-grep kullanım kolaylığı istiyorsanız.
Şu durumlarda yerel vendor/bin/greph -p kullanın:
- Yeni kod yazıyor ve ast-grep CLI biçimine ihtiyaç duymuyorsanız.
- Metin kipiyle aynı bayrak kümesini istiyorsanız (yerel ikili dosya her iki kipi birleştirir).
Kullanım
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
run temel ast-grep fiilidir. scan ve rewrite, yaygın kullanımı yansıtan yalnızca sarmalayıcıya özgü takma adlardır. Parametresiz bir çağrı, tek seferlik arama olarak çalışır:
./vendor/bin/sg --pattern 'array($$$ITEMS)' src
Desenler
Desen dil bilgisi, yerel AST aramasıyla aynıdır. Tam başvuru için Kipler / AST Arama bölümüne bakın.
./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
Yeniden yazmalar
Sarmalayıcı, yerel yeniden yazmayla aynı deneme / etkileşimli / yazma iş akışını, ast-grep bayrak adlarıyla destekler:
# 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 çıktısı
--json, ast-grep biçimli JSON üretir. Üç stil desteklenir:
./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
| Stil | Biçim |
|---|---|
--json (varsayılan pretty) |
Tek, biçimlendirilmiş JSON dizisi |
--json=stream |
Her satırda bir eşleşme; satır sonlarıyla ayrılmış JSON |
--json=compact |
Tek, sıkıştırılmış JSON dizisi |
Doğrulanmış kapsam
Aşağıdaki bayraklar, özellik matrisinde üst kaynak sg ikili dosyasına karşı doğrulanmıştır. Bir bayrağın iki yazımı varsa (-p ve --pattern, --glob ve --globs), denemede bunlardan biri kullanılır; sarmalayıcı ikisini de aynı seçenek olarak ayrıştırır.
Desen bayrakları
--pattern PATTERN(üst düzeyde veruniçinde)-p PATTERN(takma ad)--rewrite TEMPLATE-r TEMPLATE--lang NAME,-l NAME
Eşleşme bayrakları
--files-with-matches--json(pretty,stream,compact)--update-all,-U
Gezgin bayrakları
--no-ignore hidden(birleşik biçim)--glob GLOB,--globs GLOB
İşçi bayrakları
-j N,--threads N
Deneme yapılmadan kabul edilenler
Sarmalayıcı bu bayrakları da kabul eder, ancak özellik matrisi denemeleri henüz bunları kapsamaz:
- Tek başına
--no-ignoreveyahiddendışındaki bir değerle --type NAME,--type-not NAME
Yalnızca sarmalayıcıya özgü ekler
Sarmalayıcı, ast-grep'da bulunmayan birkaç yardımcı özellik sunar:
scanverewrite,runiçin takma adlar--hiddenbayrağı (ast-grep bunu--no-ignore hiddeniçine alır)--dry-runyeniden yazma önizleme takma adı--interactiveyeniden yazma onay akışı
Sınırlamalar
Greph'ın sg sarmalayıcısı, çoğu aracın ve ajanın kullandığı yapısal arama ve yeniden yazma kapsamını karşılar. Şu ast-grep özelliklerini şu anda sunmaz:
- YAML kural dosyaları (
--rule,--config) - PHP ötesinde çok dilli tarama
- Desen tabanlı olmayan dönüştürücüler (
--debug-query,--inspect) - LSP entegrasyonu
Eksik bir bayrakla karşılaşırsanız, üst kaynak sg ile çalıştırdığınız denemeyi ve beklenen çıktıyı içeren bir sorun bildirin.
Davranış eşdeğerliği
Sarmalayıcı, bayt düzeyinde değil davranış düzeyinde eşdeğerliği hedefler. Çıktı anlamsal olarak eşdeğerdir, ancak görsel ayrıntılarda farklılık gösterebilir. özellik matrisi için kullanılan denemeler, bayt dizisini değil ayrıştırmayla ilgili alanları (dosya yolu, satır numarası, yakalanan kod, yakalamalar, JSON biçimi) karşılaştırır.