
# CLI viide

Greph sisaldab nelja käivitatavat faili. Kõik neli kasutavad sama mootorit; erinevus seisneb selles, millise liidese nad pakuvad.

| Binaarfail | Eesmärk |
|---|---|
| `greph` | Natiivne tekstiotsing, AST-otsing ja AST ümberkirjutamine |
| `greph-index` | Eelsoojendatud tekstiindeks, AST faktide indeks ja vahemällu salvestatud AST-otsing |
| `rg` | ripgrep-stiilis ühilduvusümbris |
| `sg` | ast-grep-stiilis ühilduvusümbris |

Näidetes kasutatakse kõikjal teed `./vendor/bin/<binary>`, mis töötab koos Greph 0.2.3-ga või hilisema versiooniga, mis on sõltuvusena installitud. Kui töötate hoidla klooniga, asendage see väärtusega `./bin/<binary>`.

---

## `greph`

Natiivne tekstiotsing, AST-otsing ja AST ümberkirjutamine.

```bash
greph [options] pattern [path...]
greph -p pattern [options] [path...]
greph -p pattern -r replacement [options] [path...]
```

Kui teed ei määrata, otsitakse praegusest kataloogist.

### Tekstirežiim

Vaikerežiim. Mustrid on PCRE2 regexid, kui pole määratud `-F`.

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

Väljundvorming vastab `grep -rn`-i omale:

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

### AST-režiim

Aktiveeritakse suvandiga `-p`. Mustrid kirjutatakse tavalise PHP-ina, kasutades metavariablesid `$VAR` ja `$$$VARIADIC`. Täielikku mustrite grammatikat vaadake jaotisest [Režiimid / AST-otsing](https://greph.inline0.dev/et/docs/modes/ast).

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

### Ümberkirjutusrežiim

Aktiveeritakse, kui kombineerida `-p` ja `-r`. Asendusmall kasutab samu metavariablesid mis otsingumuster; hõivatud sõlmed lisatakse nime järgi.

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

### Suvandid

| Lipp | Tähendus |
|---|---|
| `-F` | Fikseeritud stringi otsing (regexita) |
| `-i` | Tõstutundetu sobitamine |
| `-w` | Terve sõna sobitamine |
| `-v` | Pööra sobitamine ümber |
| `-c` | Sobivuste arv failis |
| `-l` | Loetle ainult sobivate failide teed |
| `-L` | Loetle ainult mittesobivate failide teed |
| `-h` | Peida tekstirežiimis failinime eesliited |
| `-H` | Prindi tekstirežiimis alati failinime eesliited |
| `-n` | Kuva reanumbrid (vaikimisi: sees) |
| `-A N` | Kuva iga sobivuse järel N rida |
| `-B N` | Kuva iga sobivuse ees N rida |
| `-C N` | Kuva enne ja pärast iga sobivust N kontekstirida |
| `-m N` | Peata pärast N sobivust faili kohta |
| `-j N` | Kasuta N paralleeltöötlejat |
| `-p PATTERN` | AST-otsingu muster |
| `-r TEMPLATE` | AST ümberkirjutamise mall (vajab valikut `-p`) |
| `--glob GLOB` | Kaasa ainult failid, mille tee vastab GLOB-ile |
| `--type NAME` | Kaasa failitüübi alias (`php`, `js`, `md`, ...) |
| `--type-not NAME` | Välista failitüübi alias |
| `--lang NAME` | AST keel. Vaikimisi: `php` |
| `--json` | Väljasta JSON väljund |
| `--no-ignore` | Eira `.gitignore` ja `.grephignore` reegleid |
| `--hidden` | Kaasa peidetud failid |
| `--dry-run` | Kuva ümberkirjutused faile kirjutamata |
| `--interactive` | Kinnita iga ümberkirjutatud fail |
| `--help` | Kuva lühikasutusjuhend |

---

## `greph-index`

Eelsoojendatud tekstiindeks, AST faktide indeks ja vahemällu salvestatud AST-otsing.

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

### Tekstiindeks

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

Tekstiindeks on eelsoojendatud trigrammide ja identifikaatorite postituste hoidla. Vaikimisi asub see indekseeritud juures aadressil `.greph-index/`.

### Indeksikogumid

Indeksikogumid muudavad korduvad mitme indeksiga töövood nimega manifestiks:

```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)' .
```

Vaikemanifesti fail on `.greph-index-set.json`. Iga kirje osutab juurele, režiimile ja elutsükli profiilile. `set build` ja `set refresh` töötavad lubatud kirjetega; `set search` käivitub valitud kirjete lõikes ja eemaldab kattuvad sobivused.

### AST faktide indeks

```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 faktide indeks eraldab sõlmetaseme faktid (väljakutsed, eksemplarid, klassid, meetodid) päringutega kasutatavasse hoidlasse. Otsingud tehakse O(log n) faktivõtme alusel ja seejärel kontrollitakse lähtekoodi vastu. Vaikimisi salvestatakse aadressil `.greph-ast-index/`.

### AST vahemälu

```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 vahemälu salvestab parsitud puud kettale, et otsingud saaksid parseri vahele jätta. Vaikimisi salvestatakse aadressil `.greph-ast-cache/`.

### Suvandid

Tekstiotsingu suvandid vastavad lippude komplektile `greph` (`-F`, `-i`, `-w`, `-v`, `-c`, `-l`, `-L`, `-A`, `-B`, `-C`, `-m`, `--glob`, `--type`, `--type-not`, `--json`, `--no-ignore`, `--hidden`).

Lisalipud:

| Lipp | Tähendus |
|---|---|
| `--index-dir DIR` | Kasuta vaikeväärtusest erinevat eelsoojendatud indeksikataloogi. Mitme indeksi otsingu ja statistika jaoks korratav. |
| `--lifecycle PROFILE` | Koostamispoliitika: `static`, `manual-refresh`, `opportunistic-refresh`, `strict-stale-check` |
| `--auto-refresh-max-files N` | Oportunistliku värskendamise faililävi |
| `--auto-refresh-max-bytes N` | Oportunistliku värskendamise baidilävi |
| `--manifest FILE` | Laadi indeksikogumi manifest. Vaikimisi: `.greph-index-set.json` |
| `--mode MODE` | Piira kogumi toimingud väärtustega `text`, `ast-index` või `ast-cache` |
| `--index NAME` | Piira kogumi toimingud nimega manifestikirjega. Korratav. |
| `--show-index-origin` | Lisa eelsoojendatud mitme indeksi või kogumi väljundile sobiva indeksikirje nimi |
| `--trace-plan` | Väljasta eelsoojendatud plaanuri diagnostika aadressile `stderr` |
| `--dry-refresh` | Režiimis `stats` näita, mida eelsoojendatud otsing teeks, ilma midagi muutmata |
| `--lang NAME` | AST keel otsingutele `ast-index` / `ast-cache`. Vaikimisi: `php` |
| `-j N`, `--jobs N` | AST-skannimise töölised |
| `-l`, `--files-with-matches` | Loetle ainult sobivate failide teed (AST-režiim) |
| `--strict-parse` | Ebaõnnestu parsingu vigade korral, mitte ära jäta neid vahele |
| `--fallback MODE` | Puuduva indeksi käitumine: `fail` (vaikimisi) või `scan` |
| `--help` | Kuva lühikasutusjuhend |

---

## `rg`

ripgrep-stiilis ühilduvusümbris. Toetab sagedamini kasutatavaid ripgrep lippe. Kontrollitud funktsioonide loend on avaldatud [funktsioonide maatriksis](https://greph.inline0.dev/et/docs/advanced/feature-matrix).

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

### Näited

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

### Toetatud suvandid

| Lipp | Tähendus |
|---|---|
| `-F`, `--fixed-strings` | Fikseeritud stringi otsing |
| `-i`, `--ignore-case` | Tõstutundetu otsing |
| `-w`, `--word-regexp` | Terve sõna otsing |
| `-v`, `--invert-match` | Pööra sobivused ümber |
| `-c`, `--count` | Loenda sobivaid ridu |
| `-l`, `--files-with-matches` | Loetle sobivad failid |
| `--files-without-match` | Loetle mittesobivad failid |
| `-I`, `--no-filename` | Peida failinime eesliited |
| `-H`, `--with-filename` | Prindi alati failinime eesliited |
| `-n`, `--line-number` | Kuva reanumbrid |
| `-A N`, `--after-context N` | Kuva iga sobivuse järel N rida |
| `-B N`, `--before-context N` | Kuva iga sobivuse ees N rida |
| `-C N`, `--context N` | Kuva N rida enne ja pärast iga sobivust |
| `-m N`, `--max-count N` | Peata pärast N sobivust faili kohta |
| `-j N`, `--threads N` | Kasuta N paralleeltöötlejat |
| `-e P`, `--regexp P` | Otsingumuster |
| `-L`, `--follow` | Järgi sümbollinke |
| `--glob GLOB` | Kaasa ainult failid, mille tee vastab GLOB-ile |
| `--type NAME` | Kaasa failitüüp |
| `--type-not NAME` | Välista failitüüp |
| `--json` | Väljasta ripgrep-stiilis JSON sündmused |
| `--no-ignore` | Eira `.gitignore` ja `.grephignore` reegleid |
| `--hidden` | Kaasa peidetud failid |
| `--files` | Loetle otsimise asemel kandidaatfailid |
| `--help` | Kuva lühikasutusjuhend |

---

## `sg`

ast-grep-stiilis ühilduvusümbris. Toetab sagedamini kasutatavaid ast-grep lippe. Kontrollitud funktsioonide loend on avaldatud [funktsioonide maatriksis](https://greph.inline0.dev/et/docs/advanced/feature-matrix).

```bash
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
```

`run` on kanooniline ast-grep-verb. `scan` ja `rewrite` on ainult ümbrise varjunimed, mis järgivad levinud kasutust. Ka paljas käivitus (`sg --pattern ... .`) toimib ühekordse otsinguna.

### Näited

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

### Toetatud suvandid

| Lipp | Tähendus |
|---|---|
| `-p`, `--pattern PATTERN` | AST muster |
| `-r`, `--rewrite TEMPLATE` | Ümberkirjutamise mall |
| `-l`, `--lang NAME` | AST keel. Vaikimisi: `php` |
| `-j`, `--threads N` | Kasuta N paralleeltöötlejat |
| `-i`, `--interactive` | Kinnita iga ümberkirjutus |
| `-U`, `--update-all` | Rakenda ümberkirjutused kinnituseta |
| `--files-with-matches` | Prindi ainult sobivusi sisaldavate failide teed |
| `--json[=STYLE]` | Väljasta JSON väljund. STIIL = `pretty`, `stream` või `compact` |
| `--no-ignore [MODE]` | Eira hoidla eiramisreegleid |
| `--hidden` | Kaasa peidetud failid |
| `--glob GLOB`, `--globs GLOB` | Kaasa ainult failid, mille tee vastab GLOB-ile |
| `--type NAME` | Kaasa failitüüp |
| `--type-not NAME` | Välista failitüüp |
| `--dry-run` | Vaata ümberkirjutused üle faile kirjutamata |
| `--help` | Kuva lühikasutusjuhend |

---

## Väljumiskoodid

Greph järgib programmi grep / ripgrep tavasid:

| Kood | Tähendus |
|---|---|
| `0` | Leiti vähemalt üks sobivus (või ümberkirjutamisel muudeti vähemalt üht faili) |
| `1` | Sobivusi ei leitud |
| `2` | Kasutusviga või käitustõrge (vigased argumendid, puuduv indeks, parsingu viga režiimis `--strict-parse`) |
