
# Compatibiliteit met rg

`vendor/bin/rg` is een compatibiliteitswrapper in de stijl van ripgrep. De wrapper accepteert de meestgebruikte ripgrep-vlaggen, doorloopt de bestandstructuur op dezelfde manier als ripgrep en genereert overeenkomende uitvoer. De geverifieerde mogelijkheden zijn overgenomen uit tests met de upstream-binary `rg` en staan in [Geavanceerd / Functiematrix](https://greph.inline0.dev/nl/docs/advanced/feature-matrix).

De wrapper is een eenvoudige CLI-vertaler; het daadwerkelijke zoekwerk wordt uitgevoerd door dezelfde `Greph\Text\TextSearcher`-engine die `vendor/bin/greph` gebruikt.

## Wanneer gebruik je deze?

Gebruik de wrapper wanneer:

- Je een bestaande tool, agent of script hebt dat al `rg` aanroept.
- Je een direct inzetbare vervanging wilt die werkt in omgevingen waar je ripgrep zelf niet kunt installeren (gedeelde hosting, streng beveiligde containers, beperkte PaaS).
- Je ripgrep-gebruiksgemak wilt op infrastructuur waarop alleen PHP beschikbaar is.

Gebruik de native `vendor/bin/greph` wanneer:

- Je nieuwe code schrijft en de ripgrep-vorm van CLI niet nodig hebt.
- Je toegang wilt tot native vlaggen die de wrapper niet aanbiedt (bijvoorbeeld de AST-modus).

## Gebruik

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

Een aanroep zonder argumenten doorzoekt `.` recursief:

```bash
./vendor/bin/rg -F "function"
```

`--files` geeft kandidaatbestanden weer in plaats van te zoeken:

```bash
./vendor/bin/rg --files
./vendor/bin/rg --files --type php
./vendor/bin/rg --files --hidden
```

## Uitvoer van JSON

`--json` genereert dezelfde gebeurtenisvormige gegevens als ripgrep:

```bash
./vendor/bin/rg --json -F "function walk" src/Greph.php
```

```json
{"type":"begin","data":{"path":{"text":"src/Greph.php"}}}
{"type":"match","data":{"path":{"text":"src/Greph.php"},"lines":{"text":"    public static function walk(string|array $paths, ?WalkOptions $options = null): FileList\n"},"line_number":41,"absolute_offset":1034,"submatches":[{"match":{"text":"function walk"},"start":18,"end":31}]}}
{"type":"end","data":{"path":{"text":"src/Greph.php"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":0,"human":"0.000000s"},"searches":1,"searches_with_match":1,"bytes_searched":13383,"bytes_printed":282,"matched_lines":1,"matches":1}}}
{"type":"summary","data":{"elapsed_total":{"human":"0.000000s","nanos":0,"secs":0},"stats":{"bytes_printed":282,"bytes_searched":13383,"matched_lines":1,"matches":1,"searches":1,"searches_with_match":1,"elapsed":{"human":"0.000000s","nanos":0,"secs":0}}}}
```

Tijdmetingen in de `stats`-objecten worden altijd als nul gerapporteerd.

Dit is het schema dat downstream-tools verwachten wanneer ze de gestructureerde uitvoer van ripgrep gebruiken. Gebruik `vendor/bin/greph --json` als je een eenvoudigere structuur wilt.

## Geverifieerde mogelijkheden

De volgende vlaggen zijn geverifieerd met `rg` zelf in de [functiematrix](https://greph.inline0.dev/nl/docs/advanced/feature-matrix). De upstream-binary en de wrapper produceren voor elke test dezelfde uitvoer. Als een vlag een korte en een lange schrijfwijze heeft, gebruikt de test er één en verwerkt de wrapper beide als dezelfde optie.

### Zoekvlaggen

- `-F`, `--fixed-strings`
- `-i`, `--ignore-case`
- `-w`, `--word-regexp`
- `-v`, `--invert-match`
- `-c`, `--count`
- `-l`, `--files-with-matches`
- `--files-without-match`
- `-I`, `--no-filename`
- `-H`, `--with-filename`
- `-n`, `--line-number`
- `-A N`, `--after-context N`
- `-B N`, `--before-context N`
- `-C N`, `--context N`
- `-m N`, `--max-count N`
- `-e P`, `--regexp P`

### Vlaggen voor het doorlopen van bestanden

- `-L`, `--follow`
- `--glob GLOB`
- `--type NAME`
- `--type-not NAME`
- `--no-ignore`
- `--hidden`
- `--files`
- `--files --hidden`
- `--files --type NAME`

### Uitvoervlaggen

- `--json`

### Geaccepteerd zonder test

De wrapper accepteert deze vlaggen ook, maar er is nog geen functiematrixtest voor:

- `-j N`, `--threads N` (aantal workers, zie [Parallelle workers](https://greph.inline0.dev/nl/docs/advanced/parallel))
- `-q`, `--quiet`
- `--no-follow`

## Beperkingen

De Greph-wrapper van `rg` omvat de zoek- en bestandsdoorloopfuncties die de meeste tools en agents gebruiken. Deze biedt momenteel geen ondersteuning voor de volgende functies van ripgrep:

- Regex over meerdere regels (`-U`, `--multiline`)
- Vervanging (`-r`, `--replace`) in tekstmodus (gebruik in plaats daarvan `vendor/bin/greph` voor AST-herschrijven)
- Aangepaste typedefinities (`--type-add`, `--type-clear`)
- Vlaggen voor codering (`-E`, `--encoding`)
- Filterscripts voor `--pre`
- `--sort`, `--sortr`

Als je een ontbrekende vlag tegenkomt, dien dan een issue in met de test die je op de upstream-`rg` hebt uitgevoerd en de verwachte uitvoer. Nieuwe functies worden toegevoegd met bijbehorende oracle-tests, zodat de geverifieerde mogelijkheden blijven groeien.

## Gedragspariteit

De wrapper streeft naar gedragspariteit, niet naar bytepariteit. De uitvoer is regel voor regel gelijkwaardig, maar kan cosmetisch verschillen (kleurcodes, afkappen op terminalbreedte). De tests voor de [functiematrix](https://greph.inline0.dev/nl/docs/advanced/feature-matrix) controleren semantische gelijkwaardigheid, geen byte-exacte verschillen.

Voor agents en tools die uitvoer parseren, zijn de velden die relevant zijn voor de parser (bestandspad, regelnummer, inhoud, overeenkomstpositie) voor elke geverifieerde test byte-identiek aan die van de upstream-`rg`.
