İçeriğe geç

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

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

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

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

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

Kabuk
./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 ve run iç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-ignore veya hidden dışı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:

  • scan ve rewrite, run için takma adlar
  • --hidden bayrağı (ast-grep bunu --no-ignore hidden içine alır)
  • --dry-run yeniden yazma önizleme takma adı
  • --interactive yeniden 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.