İçeriğe geç

CLI Başvurusu

Greph dört yürütülebilir dosya sunar. Dördü de aynı altyapıyı paylaşır; fark, sundukları arayüzdedir.

İkili dosya Amaç
greph Yerel metin araması, AST araması ve AST yeniden yazma
greph-index Hazır durumdaki metin dizini, AST olgu dizini ve önbelleğe alınmış AST araması
rg ripgrep tarzı uyumluluk wrapper'ı
sg ast-grep tarzı uyumluluk wrapper'ı

Örneklerdeki tüm yollar, Greph 0.2.3 ile çalışan veya bağımlılık olarak sonradan yüklenen ./vendor/bin/<binary> değerini kullanır. Depoyu klonladıysanız bunun yerine ./bin/<binary> değerini kullanın.


greph

Yerel metin araması, AST araması ve AST yeniden yazma.

Kabuk
greph [options] pattern [path...]
greph -p pattern [options] [path...]
greph -p pattern -r replacement [options] [path...]

Bir yol belirtilmezse geçerli dizinde arama yapılır.

Metin modu

Varsayılan moddur. -F ayarlanmadıkça desenler PCRE2 regex'leridir.

Kabuk
# Regex search
./vendor/bin/greph "function\s+\w+" src

# Fixed-string search
./vendor/bin/greph -F "function" src

# Case-insensitive whole-word with two lines of context
./vendor/bin/greph -F -i -w -C 2 "function" src

Çıktı biçimi grep -rn ile eşleşir:

Text
src/Greph.php:31:final class Greph
src/Greph.php:36:    public static function walk(...

AST modu

-p ile etkinleştirilir. Desenler, $VAR ve $$$VARIADIC metavariables içeren sıradan PHP ile yazılır. Desen söz diziminin tamamı için Modlar / AST Araması bölümüne bakın.

Kabuk
./vendor/bin/greph -p 'new $CLASS()' src
./vendor/bin/greph -p '$obj->$method($$$ARGS)' src
./vendor/bin/greph -p 'function $name($$$PARAMS): void {}' src

Yeniden yazma modu

-p ile -r birlikte kullanılarak etkinleştirilir. Değiştirme şablonu, arama deseniyle aynı metavariables öğelerini kullanır; yakalanan düğümler adlarına göre içeri eklenir.

Kabuk
# Preview only
./vendor/bin/greph -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src

# Apply
./vendor/bin/greph -p 'array($$$ITEMS)' -r '[$$$ITEMS]' src

# Confirm each file before writing
./vendor/bin/greph -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --interactive src

Seçenekler

Bayrak Anlamı
-F Sabit metin araması (regex yok)
-i Büyük/küçük harfe duyarsız eşleştirme
-w Tam sözcük eşleştirmesi
-v Eşleşmeyi tersine çevirir
-c Dosya başına eşleşme sayısını verir
-l Yalnızca eşleşen dosya yollarını listeler
-L Yalnızca eşleşmeyen dosya yollarını listeler
-h Metin modunda dosya adı öneklerini gizler
-H Metin modunda dosya adı öneklerini her zaman yazdırır
-n Satır numaralarını gösterir (varsayılan: açık)
-A N Her eşleşmeden sonraki N satırı gösterir
-B N Her eşleşmeden önceki N satırı gösterir
-C N Her eşleşmenin öncesindeki ve sonrasındaki N bağlam satırını gösterir
-m N Dosya başına N eşleşmeden sonra durur
-j N N paralel worker kullanır
-p PATTERN AST arama deseni
-r TEMPLATE AST yeniden yazma şablonu (-p gerektirir)
--glob GLOB Yalnızca yolları GLOB ile eşleşen dosyaları dahil eder
--type NAME Bir dosya türü takma adını dahil eder (php, js, md, ...)
--type-not NAME Bir dosya türü takma adını hariç tutar
--lang NAME AST dili. Varsayılan: php
--json JSON çıktısı üretir
--no-ignore .gitignore ve .grephignore kurallarını yok sayar
--hidden Gizli dosyaları dahil eder
--dry-run Yeniden yazma işlemlerini dosyalara yazmadan yazdırır
--interactive Yeniden yazılan her dosyayı onaylar
--help Satır içi kullanımı gösterir

greph-index

Hazır durumdaki metin dizini, AST olgu dizini ve önbelleğe alınmış AST araması.

Kabuk
greph-index build [path] [--index-dir DIR]
greph-index refresh [path] [--index-dir DIR]
greph-index search [options] pattern [path...]

greph-index set build [manifest] [--manifest FILE] [--mode MODE] [--index NAME...]
greph-index set refresh [manifest] [--manifest FILE] [--mode MODE] [--index NAME...]
greph-index set stats [manifest] [--manifest FILE] [--mode MODE] [--index NAME...] [--dry-refresh]
greph-index set search [options] pattern [path...]

greph-index ast-index build [path] [--index-dir DIR]
greph-index ast-index refresh [path] [--index-dir DIR]
greph-index ast-index search [options] pattern [path...]

greph-index ast-cache build [path] [--index-dir DIR]
greph-index ast-cache refresh [path] [--index-dir DIR]
greph-index ast-cache search [options] pattern [path...]

Metin dizini

Kabuk
# Build (full)
./vendor/bin/greph-index build .

# Build with lifecycle policy
./vendor/bin/greph-index build . \
  --lifecycle opportunistic-refresh \
  --auto-refresh-max-files 32 \
  --auto-refresh-max-bytes 1048576

# Refresh (incremental: added, updated, deleted, unchanged)
./vendor/bin/greph-index refresh .

# Query
./vendor/bin/greph-index search -F "function" .
./vendor/bin/greph-index search -i -w "function" .
./vendor/bin/greph-index search -c "function" .
./vendor/bin/greph-index search --trace-plan -F "function" .
./vendor/bin/greph-index search -F "function" . \
  --index-dir core/.greph-index \
  --index-dir plugins/demo/.greph-index \
  --show-index-origin

Metin dizini, hazır durumdaki bir trigram + tanımlayıcı ters dizin deposudur. Varsayılan olarak dizinlenen kökte .greph-index/ konumunda bulunur.

Dizin kümeleri

Dizin kümeleri, yinelenen çoklu dizin iş akışlarını adlandırılmış bir manifestoya dönüştürür:

Kabuk
./vendor/bin/greph-index set build
./vendor/bin/greph-index set stats --dry-refresh
./vendor/bin/greph-index set search --show-index-origin -F "function" .
./vendor/bin/greph-index set search --mode ast-index 'new $CLASS()' .
./vendor/bin/greph-index set search --mode ast-cache 'array($$$ITEMS)' .

Varsayılan manifesto dosyası .greph-index-set.json değeridir. Her girdi bir köke, moda ve yaşam döngüsü profiline işaret eder. set build ve set refresh etkin girdiler üzerinde çalışır; set search seçili girdilerde paralel işlem yapar ve örtüşen eşleşmeleri tekilleştirir.

AST olgu dizini

Kabuk
./vendor/bin/greph-index ast-index build .
./vendor/bin/greph-index ast-index refresh .
./vendor/bin/greph-index ast-index search 'new $CLASS()' src
./vendor/bin/greph-index ast-index search --trace-plan 'new $CLASS()' src
./vendor/bin/greph-index ast-index search 'new $CLASS()' . \
  --index-dir core/.greph-ast-index \
  --index-dir plugins/demo/.greph-ast-index \
  --show-index-origin

AST olgu dizini, sorgulanabilir bir depoya düğüm düzeyindeki olguları (çağrılar, örnek oluşturmalar, sınıflar, yöntemler) çıkarır. Aramalar önce olgu anahtarına göre O(log n) yapılır, ardından kaynak üzerinde doğrulanır. Varsayılan olarak .greph-ast-index/ konumunda saklanır.

AST önbelleği

Kabuk
./vendor/bin/greph-index ast-cache build .
./vendor/bin/greph-index ast-cache refresh .
./vendor/bin/greph-index ast-cache search 'array($$$ITEMS)' src
./vendor/bin/greph-index ast-cache search --trace-plan 'array($$$ITEMS)' src

AST önbelleği, aramaların ayrıştırıcıyı tamamen atlaması için ayrıştırılmış ağaçları diskte saklar. Varsayılan olarak .greph-ast-cache/ konumunda saklanır.

Seçenekler

Metin arama seçenekleri, greph bayrak kümesiyle eşleşir (-F, -i, -w, -v, -c, -l, -L, -A, -B, -C, -m, --glob, --type, --type-not, --json, --no-ignore, --hidden).

Ek bayraklar:

Bayrak Anlamı
--index-dir DIR Varsayılan olmayan hazır durumdaki bir dizin dizini kullanır. Çoklu dizin araması ve istatistikler için tekrarlanabilir.
--lifecycle PROFILE Oluşturma ilkesi: static, manual-refresh, opportunistic-refresh, strict-stale-check
--auto-refresh-max-files N Fırsatçı yenileme için dosya eşiği
--auto-refresh-max-bytes N Fırsatçı yenileme için bayt eşiği
--manifest FILE Bir dizin kümesi manifestosu yükler. Varsayılan: .greph-index-set.json
--mode MODE Küme işlemlerini text, ast-index veya ast-cache ile sınırlar
--index NAME Küme işlemlerini adlandırılmış bir manifesto girdisiyle sınırlar. Tekrarlanabilir.
--show-index-origin Hazır durumdaki çoklu dizin veya küme çıktısının başına eşleşen dizin girdi adını ekler
--trace-plan Hazır durumdaki planlayıcı tanılamalarını stderr konumuna iletir
--dry-refresh stats içinde, hiçbir şeyi değiştirmeden hazır durumdaki aramanın ne yapacağını bildirir
--lang NAME ast-index / ast-cache aramaları için AST dili. Varsayılan: php
-j N, --jobs N AST taramaları için worker sayısı
-l, --files-with-matches Yalnızca eşleşen dosya yollarını listeler (AST modu)
--strict-parse Hataları atlamak yerine ayrıştırma hatalarında başarısız olur
--fallback MODE Dizin yoksa yapılacak işlem: fail (varsayılan) veya scan
--help Satır içi kullanımı gösterir

rg

ripgrep tarzı uyumluluk wrapper'ı. En yaygın kullanılan ripgrep bayraklarını destekler. Doğrulanmış özellikler özellik matrisinde yayımlanır.

Kabuk
rg [options] pattern [path...]
rg --files [options] [path...]

Örnekler

Kabuk
./vendor/bin/rg -F "function" src
./vendor/bin/rg --json -F "function" src
./vendor/bin/rg --files src
./vendor/bin/rg --files --type php .
./vendor/bin/rg --type-not js -F "function" .

Desteklenen seçenekler

Bayrak Anlamı
-F, --fixed-strings Sabit dize araması
-i, --ignore-case Büyük/küçük harfe duyarsız arama
-w, --word-regexp Tam sözcük araması
-v, --invert-match Eşleşmeleri tersine çevir
-c, --count Eşleşen satırları say
-l, --files-with-matches Eşleşen dosyaları listele
--files-without-match Eşleşmeyen dosyaları listele
-I, --no-filename Dosya adı öneklerini gizle
-H, --with-filename Dosya adı öneklerini her zaman yazdır
-n, --line-number Satır numaralarını göster
-A N, --after-context N Her eşleşmeden sonraki N satırı göster
-B N, --before-context N Her eşleşmeden önceki N satırı göster
-C N, --context N Her eşleşmeden önceki ve sonraki N satırı göster
-m N, --max-count N Dosya başına N eşleşmeden sonra dur
-j N, --threads N N paralel işçi kullan
-e P, --regexp P Arama deseni
-L, --follow Sembolik bağlantıları izle
--glob GLOB Yalnızca yolları GLOB ile eşleşen dosyaları dahil et
--type NAME Bir dosya türünü dahil et
--type-not NAME Bir dosya türünü hariç tut
--json ripgrep tarzı JSON olayları yayınla
--no-ignore .gitignore ve .grephignore kurallarını yok say
--hidden Gizli dosyaları dahil et
--files Arama yapmak yerine aday dosyaları listele
--help Satır içi kullanımı göster

sg

ast-grep tarzı uyumluluk sarmalayıcısı. En sık kullanılan ast-grep bayraklarını destekler. Doğrulanmış kapsam özellik matrisinde yayımlanır.

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ı (sg --pattern ... .) da tek seferlik arama olarak çalışır.

Örnekler

Kabuk
./vendor/bin/sg run --pattern 'array($$$ITEMS)' src/App.php
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' src/App.php
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --update-all src/App.php
./vendor/bin/sg run --json --pattern 'dispatch($EVENT)' src/App.php
./vendor/bin/sg scan -p 'array($$$ITEMS)' src/App.php
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src/App.php

Desteklenen seçenekler

Bayrak Anlamı
-p, --pattern PATTERN AST deseni
-r, --rewrite TEMPLATE Yeniden yazma şablonu
-l, --lang NAME AST dili. Varsayılan: php
-j, --threads N N paralel işçi kullan
-i, --interactive Her yeniden yazmayı onayla
-U, --update-all Yeniden yazmaları onay almadan uygula
--files-with-matches Yalnızca eşleşme bulunan dosya yollarını yazdır
--json[=STYLE] JSON çıktısı üret. STYLE = pretty, stream veya compact
--no-ignore [MODE] Depo yok sayma kurallarını yok say
--hidden Gizli dosyaları dahil et
--glob GLOB, --globs GLOB Yalnızca yolları GLOB ile eşleşen dosyaları dahil et
--type NAME Bir dosya türünü dahil et
--type-not NAME Bir dosya türünü hariç tut
--dry-run Dosyalara yazmadan yeniden yazmaları önizle
--help Satır içi kullanımı göster

Çıkış kodları

Greph, grep / ripgrep kurallarını izler:

Kod Anlamı
0 En az bir eşleşme bulundu (veya yeniden yazmalarda en az bir dosya değiştirildi)
1 Eşleşme bulunamadı
2 Kullanım hatası veya çalışma zamanı hatası (geçersiz bağımsız değişkenler, eksik dizin, --strict-parse kipinde ayrıştırma hatası)