
# Compatibilitate cu rg

`vendor/bin/rg` este un wrapper de compatibilitate în stilul ripgrep. Acceptă cele mai utilizate opțiuni ripgrep, parcurge arborele de fișiere la fel ca ripgrep și emite rezultatele care se potrivesc. Interfața verificată, reprodusă pe baza testelor efectuate cu binarul upstream `rg`, este disponibilă în [Avansat / Matricea de funcționalități](https://greph.inline0.dev/ro/docs/advanced/feature-matrix).

Wrapperul este un traducător simplu CLI; căutarea propriu-zisă este efectuată de același motor `Greph\Text\TextSearcher` pe care îl folosește `vendor/bin/greph`.

## Când să îl folosiți

Folosiți wrapperul când:

- Aveți deja un instrument, agent sau script care apelează `rg`.
- Doriți un înlocuitor direct care funcționează în medii în care nu puteți instala ripgrep propriu-zis (găzduire partajată, containere securizate, platforme PaaS cu restricții).
- Doriți ușurința în utilizare a ripgrep pe infrastructură care oferă numai PHP.

Folosiți `vendor/bin/greph` nativ când:

- Scrieți cod nou și nu aveți nevoie de forma ripgrep CLI.
- Doriți acces la opțiuni native pe care wrapperul nu le expune (de exemplu, modul AST).

## Utilizare

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

O invocare fără argumente caută recursiv în `.`:

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

`--files` listează fișierele candidate în loc să caute:

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

## Ieșire JSON

`--json` emite aceeași încărcătură utilă structurată ca evenimente pe care o produce 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}}}}
```

Duratele din obiectele `stats` sunt întotdeauna raportate ca zero.

Aceasta este schema pe care o așteaptă instrumentele din aval când activează ieșirea structurată a lui ripgrep. Pentru o structură mai simplă, folosiți `vendor/bin/greph --json`.

## Interfață verificată

Următoarele opțiuni au fost verificate chiar în `rg` și sunt listate în [matricea de funcționalități](https://greph.inline0.dev/ro/docs/advanced/feature-matrix). Binarul upstream și wrapperul produc rezultate echivalente pentru fiecare test. Când o opțiune are o formă scurtă și una lungă, testul folosește una dintre ele, iar wrapperul le interpretează pe amândouă ca aceeași opțiune.

### Opțiuni de căutare

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

### Opțiuni pentru parcurgere

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

### Opțiuni de ieșire

- `--json`

### Acceptate fără un test de verificare

Wrapperul acceptă și următoarele opțiuni, pentru care încă nu există teste în matricea de funcționalități:

- `-j N`, `--threads N` (numărul de lucrători; consultați [Lucrători paraleli](https://greph.inline0.dev/ro/docs/advanced/parallel))
- `-q`, `--quiet`
- `--no-follow`

## Limitări

Wrapperul `rg` al Greph acoperă funcțiile de căutare și parcurgere pe care le folosesc majoritatea instrumentelor și agenților. În prezent, nu expune următoarele funcții ripgrep:

- Expresii regulate pe mai multe linii (`-U`, `--multiline`)
- Înlocuire (`-r`, `--replace`) în modul text (folosiți în schimb rescrierea AST `vendor/bin/greph`)
- Definiții de tipuri personalizate (`--type-add`, `--type-clear`)
- Opțiuni pentru codificare (`-E`, `--encoding`)
- Scripturi de filtrare `--pre`
- `--sort`, `--sortr`

Dacă vă lipsește o opțiune, raportați problema și includeți testul efectuat cu `rg` upstream și rezultatul așteptat. Funcțiile noi sunt adăugate împreună cu testele lor de referință, astfel încât interfața verificată să se extindă în continuare.

## Paritate de comportament

Wrapperul urmărește paritatea de comportament, nu identitatea la nivel de octet. Liniile din ieșire sunt echivalente, dar detaliile cosmetice pot diferi (coduri de culoare, trunchiere în funcție de lățimea terminalului). Testele folosite de [matricea de funcționalități](https://greph.inline0.dev/ro/docs/advanced/feature-matrix) verifică echivalența semantică, nu diferențele exacte la nivel de octet.

Pentru agenții și instrumentele care analizează ieșirea, câmpurile relevante pentru analizator (calea fișierului, numărul liniei, conținutul, poziția potrivirii) sunt identice la nivel de octet cu cele din `rg` upstream pentru fiecare test verificat.
