
# Referentie voor CLI

Greph bevat vier uitvoerbare bestanden. Ze gebruiken alle vier dezelfde engine; het verschil zit in de interface die ze bieden.

| Binair bestand | Doel |
|---|---|
| `greph` | Native tekst zoeken, AST zoeken en AST herschrijven |
| `greph-index` | Opgewarmde tekstindex, AST-feitenindex en gecachte AST-zoekopdracht |
| `rg` | Compatibiliteitswrapper in de stijl van ripgrep |
| `sg` | Compatibiliteitswrapper in de stijl van ast-grep |

Alle paden in de voorbeelden gebruiken `./vendor/bin/<binary>`, dat werkt met Greph 0.2.3 of later als afhankelijkheid geïnstalleerd. Vervang dit door `./bin/<binary>` als je vanuit een kloon van de repository werkt.

---

## `greph`

Native tekst zoeken, AST zoeken en AST herschrijven.

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

Als een pad wordt weggelaten, wordt de huidige map doorzocht.

### Tekstmodus

Standaardmodus. Patronen zijn PCRE2-regexes, tenzij `-F` is ingesteld.

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

De uitvoerindeling komt overeen met `grep -rn`:

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

### AST-modus

Wordt geactiveerd door `-p`. Patronen worden geschreven als gewone PHP met `$VAR`- en `$$$VARIADIC`-metavariabelen. Zie [Modi / AST-zoeken](https://greph.inline0.dev/nl/docs/modes/ast) voor de volledige patroongrammatica.

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

### Herschrijfmodus

Wordt geactiveerd door `-p` te combineren met `-r`. De vervangingssjabloon gebruikt dezelfde metavariabelen als het zoekpatroon; vastgelegde nodes worden op naam ingevoegd.

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

### Opties

| Vlag | Betekenis |
|---|---|
| `-F` | Zoeken naar vaste tekenreeksen (geen regex) |
| `-i` | Niet-hoofdlettergevoelig zoeken |
| `-w` | Zoeken naar hele woorden |
| `-v` | Zoekresultaat omkeren |
| `-c` | Overeenkomsten per bestand tellen |
| `-l` | Alleen paden van bestanden met overeenkomsten weergeven |
| `-L` | Alleen paden van bestanden zonder overeenkomsten weergeven |
| `-h` | Bestandsnaamprefixen onderdrukken in tekstmodus |
| `-H` | Bestandsnaamprefixen altijd weergeven in tekstmodus |
| `-n` | Regel­nummers weergeven (standaard: aan) |
| `-A N` | N regels na elke overeenkomst weergeven |
| `-B N` | N regels vóór elke overeenkomst weergeven |
| `-C N` | N contextregels vóór en na elke overeenkomst weergeven |
| `-m N` | Stoppen na N overeenkomsten per bestand |
| `-j N` | N parallelle workers gebruiken |
| `-p PATTERN` | AST-zoekpatroon |
| `-r TEMPLATE` | AST-herschrijfsjabloon (vereist `-p`) |
| `--glob GLOB` | Alleen bestanden opnemen waarvan de paden overeenkomen met GLOB |
| `--type NAME` | Een bestandstypealias opnemen (`php`, `js`, `md`, ...) |
| `--type-not NAME` | Een bestandstypealias uitsluiten |
| `--lang NAME` | AST-taal. Standaard: `php` |
| `--json` | JSON-uitvoer genereren |
| `--no-ignore` | Regels van `.gitignore` en `.grephignore` negeren |
| `--hidden` | Verborgen bestanden opnemen |
| `--dry-run` | Herschrijvingen weergeven zonder bestanden te schrijven |
| `--interactive` | Elk herschreven bestand bevestigen |
| `--help` | Inline-gebruiksinformatie weergeven |

---

## `greph-index`

Opgewarmde tekstindex, AST-feitenindex en gecachte AST-zoekopdracht.

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

### Tekstindex

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

De tekstindex is een opgewarmde opslagplaats voor trigram- en identifiervermeldingen. Deze staat standaard op `.greph-index/` in de geïndexeerde hoofdmap.

### Indexsets

Indexsets zetten herhaalde workflows met meerdere indexen om in een benoemd manifest:

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

Het standaardmanifestbestand is `.greph-index-set.json`. Elke vermelding verwijst naar een hoofdmap, een modus en een levenscyclusprofiel. `set build` en `set refresh` werken op de ingeschakelde vermeldingen; `set search` voert de zoekopdracht uit op de geselecteerde vermeldingen en verwijdert dubbele overeenkomsten.

### AST-feitenindex

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

De AST-feitenindex haalt feiten op node-niveau (aanroepen, instanties, klassen, methoden) op en slaat ze op in een doorzoekbare opslagplaats. Zoekopdrachten worden O(log n) uitgevoerd op de factsleutel en vervolgens gecontroleerd aan de hand van de bron. Deze staat standaard op `.greph-ast-index/`.

### AST-cache

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

De AST-cache slaat geparste bomen op schijf op, zodat zoekopdrachten de parser helemaal overslaan. Deze staat standaard op `.greph-ast-cache/`.

### Opties

De opties voor tekstzoeken komen overeen met de vlaggenset van `greph` (`-F`, `-i`, `-w`, `-v`, `-c`, `-l`, `-L`, `-A`, `-B`, `-C`, `-m`, `--glob`, `--type`, `--type-not`, `--json`, `--no-ignore`, `--hidden`).

Extra vlaggen:

| Vlag | Betekenis |
|---|---|
| `--index-dir DIR` | Een niet-standaardmap voor de opgewarmde index gebruiken. Herhaalbaar voor zoeken en statistieken met meerdere indexen. |
| `--lifecycle PROFILE` | Bouwbeleid: `static`, `manual-refresh`, `opportunistic-refresh`, `strict-stale-check` |
| `--auto-refresh-max-files N` | Drempel voor bestanden bij opportunistische vernieuwing |
| `--auto-refresh-max-bytes N` | Drempel voor bytes bij opportunistische vernieuwing |
| `--manifest FILE` | Een indexsetmanifest laden. Standaard: `.greph-index-set.json` |
| `--mode MODE` | Setbewerkingen beperken tot `text`, `ast-index` of `ast-cache` |
| `--index NAME` | Setbewerkingen beperken tot een benoemde manifestvermelding. Herhaalbaar. |
| `--show-index-origin` | Uitvoer van zoeken met meerdere opgewarmde indexen of indexsets vooraf laten gaan door de naam van de overeenkomende indexvermelding |
| `--trace-plan` | Diagnostische informatie van de opgewarmde planner naar `stderr` sturen |
| `--dry-refresh` | In `stats` rapporteren wat een zoekopdracht met opgewarmde index zou doen, zonder iets te wijzigen |
| `--lang NAME` | AST-taal voor zoekopdrachten met `ast-index` / `ast-cache`. Standaard: `php` |
| `-j N`, `--jobs N` | Workers voor AST-scans |
| `-l`, `--files-with-matches` | Alleen paden van bestanden met overeenkomsten weergeven (AST-modus) |
| `--strict-parse` | Stoppen bij parseerfouten in plaats van deze over te slaan |
| `--fallback MODE` | Gedrag bij ontbrekende index: `fail` (standaard) of `scan` |
| `--help` | Inline-gebruiksinformatie weergeven |

---

## `rg`

Compatibiliteitswrapper in de stijl van ripgrep. Ondersteunt de meestgebruikte ripgrep-vlaggen. De geverifieerde mogelijkheden zijn gepubliceerd in de [functiematrix](https://greph.inline0.dev/nl/docs/advanced/feature-matrix).

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

### Voorbeelden

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

### Ondersteunde opties

| Vlag | Betekenis |
|---|---|
| `-F`, `--fixed-strings` | Zoeken naar vaste tekenreeksen |
| `-i`, `--ignore-case` | Niet-hoofdlettergevoelig zoeken |
| `-w`, `--word-regexp` | Zoeken naar hele woorden |
| `-v`, `--invert-match` | Overeenkomsten omkeren |
| `-c`, `--count` | Regels met overeenkomsten tellen |
| `-l`, `--files-with-matches` | Bestanden met overeenkomsten weergeven |
| `--files-without-match` | Bestanden zonder overeenkomsten weergeven |
| `-I`, `--no-filename` | Bestandsnaamprefixen onderdrukken |
| `-H`, `--with-filename` | Bestandsnaamprefixen altijd weergeven |
| `-n`, `--line-number` | Regel­nummers weergeven |
| `-A N`, `--after-context N` | N regels na elke overeenkomst weergeven |
| `-B N`, `--before-context N` | N regels vóór elke overeenkomst weergeven |
| `-C N`, `--context N` | N regels vóór en na elke overeenkomst weergeven |
| `-m N`, `--max-count N` | Stoppen na N overeenkomsten per bestand |
| `-j N`, `--threads N` | N parallelle workers gebruiken |
| `-e P`, `--regexp P` | Zoekpatroon |
| `-L`, `--follow` | Symbolische koppelingen volgen |
| `--glob GLOB` | Alleen bestanden opnemen waarvan de paden overeenkomen met GLOB |
| `--type NAME` | Een bestandstype opnemen |
| `--type-not NAME` | Een bestandstype uitsluiten |
| `--json` | ripgrep-gebeurtenissen in JSON-stijl genereren |
| `--no-ignore` | Regels van `.gitignore` en `.grephignore` negeren |
| `--hidden` | Verborgen bestanden opnemen |
| `--files` | Kandidatenbestanden weergeven in plaats van zoeken |
| `--help` | Inline-gebruiksinformatie weergeven |

---

## `sg`

Compatibiliteitswrapper in de stijl van ast-grep. Ondersteunt de meestgebruikte ast-grep-vlaggen. De geverifieerde mogelijkheden zijn gepubliceerd in de [functiematrix](https://greph.inline0.dev/nl/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` is het canonieke ast-grep-commando. `scan` en `rewrite` zijn aliassen die alleen in de wrapper beschikbaar zijn en gangbaar gebruik weerspiegelen. Een aanroep zonder argumenten (`sg --pattern ... .`) werkt ook als een eenmalige zoekopdracht.

### Voorbeelden

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

### Ondersteunde opties

| Vlag | Betekenis |
|---|---|
| `-p`, `--pattern PATTERN` | AST-patroon |
| `-r`, `--rewrite TEMPLATE` | Herschrijfsjabloon |
| `-l`, `--lang NAME` | AST-taal. Standaard: `php` |
| `-j`, `--threads N` | N parallelle workers gebruiken |
| `-i`, `--interactive` | Elke herschrijving bevestigen |
| `-U`, `--update-all` | Herschrijvingen zonder bevestiging toepassen |
| `--files-with-matches` | Alleen bestandspaden met overeenkomsten weergeven |
| `--json[=STYLE]` | JSON-uitvoer genereren. STIJL = `pretty`, `stream` of `compact` |
| `--no-ignore [MODE]` | Regels voor het negeren van repositories negeren |
| `--hidden` | Verborgen bestanden opnemen |
| `--glob GLOB`, `--globs GLOB` | Alleen bestanden opnemen waarvan de paden overeenkomen met GLOB |
| `--type NAME` | Een bestandstype opnemen |
| `--type-not NAME` | Een bestandstype uitsluiten |
| `--dry-run` | Herschrijvingen bekijken zonder bestanden te schrijven |
| `--help` | Inline-gebruiksinformatie weergeven |

---

## Afsluitcodes

Greph volgt de conventies van grep / ripgrep:

| Code | Betekenis |
|---|---|
| `0` | Er is minstens één overeenkomst gevonden (of, bij herschrijvingen, is minstens één bestand gewijzigd) |
| `1` | Geen overeenkomsten gevonden |
| `2` | Gebruiksfout of runtimefout (ongeldige argumenten, ontbrekende index, parseerfout in `--strict-parse`-modus) |
