
# 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.

```bash
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.

```bash
# 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ı](https://greph.inline0.dev/tr/docs/modes/ast) bölümüne bakın.

```bash
./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.

```bash
# 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ı.

```bash
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

```bash
# 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:

```bash
./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

```bash
./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

```bash
./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](https://greph.inline0.dev/tr/docs/advanced/feature-matrix) yayımlanır.

```bash
rg [options] pattern [path...]
rg --files [options] [path...]
```

### Örnekler

```bash
./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](https://greph.inline0.dev/tr/docs/advanced/feature-matrix) yayımlanır.

```bash
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

```bash
./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ı) |
