
# rg-kompatibilitás

A `vendor/bin/rg` ripgrep-stílusú kompatibilitási burkoló. Elfogadja a leggyakrabban használt ripgrep jelzőket, ugyanúgy járja be a fákat, ahogyan a ripgrep, és egyező kimenetet állít elő. Az ellenőrzött felület a felsőbb szintű `rg` bináris fájllal végzett próbaeredmények alapján készült, és az [Haladó / Funkciómátrix](https://greph.inline0.dev/hu/docs/advanced/feature-matrix) oldalon található.

A burkoló egy vékony CLI-fordító; a keresést ugyanaz a `Greph\Text\TextSearcher` motor végzi, amelyet a `vendor/bin/greph` is használ.

## Mikor használja

Akkor használja a burkolót, ha:

- Van egy meglévő eszköze, ügynöke vagy szkriptje, amely már a `rg` eszközt hívja.
- Olyan közvetlenül behelyettesíthető megoldást szeretne, amely olyan környezetben is működik, ahol magát a ripgrep eszközt nem telepítheti (megosztott tárhelyen, megerősített konténerekben, korlátozott PaaS-környezetekben).
- PHP-alapú infrastruktúrán szeretné élvezni a ripgrep használatának kényelmét.

Akkor használja a natív `vendor/bin/greph` eszközt, ha:

- Új kódot ír, és nincs szüksége a ripgrep CLI formátumára.
- Hozzá szeretne férni a burkoló által nem elérhető natív jelzőkhöz (például az AST-módhoz).

## Használat

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

Az argumentum nélküli meghívás rekurzívan keres a `.` alatt:

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

A `--files` keresés helyett a lehetséges fájlokat listázza:

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

## JSON kimenet

A `--json` ugyanazt az eseményformájú adathalmazt állítja elő, mint a 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}}}}
```

A `stats` objektumokban szereplő időzítések mindig nullaként jelennek meg.

Ezt a sémát várják az alárendelt eszközök, amikor engedélyezik a ripgrep strukturált kimenetét. Ha egyszerűbb formátumot szeretne, használja inkább ezt: `vendor/bin/greph --json`.

## Ellenőrzött felület

A következő jelzők ellenőrzése közvetlenül a `rg` programon történt, az [funkciómátrix](https://greph.inline0.dev/hu/docs/advanced/feature-matrix) szerint. Mind a felsőbb szintű bináris fájl, mind a burkoló azonos kimenetet ad minden próbánál. Ha egy jelzőnek van rövid és hosszú alakja, a próba ezek egyikét használja, a burkoló pedig mindkettőt ugyanazon beállításként értelmezi.

### Keresési jelzők

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

### Bejárási jelzők

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

### Kimeneti jelzők

- `--json`

### Próba nélkül elfogadott jelzők

A burkoló ezeket a jelzőket is elfogadja, de a funkciómátrix még nem tartalmaz hozzájuk próbát:

- `-j N`, `--threads N` (munkásszám, lásd: [Párhuzamos munkások](https://greph.inline0.dev/hu/docs/advanced/parallel))
- `-q`, `--quiet`
- `--no-follow`

## Korlátozások

A Greph `rg`-burkolója a legtöbb eszköz és ügynök által használt keresési és bejárási felületet biztosítja. Jelenleg a következő ripgrep funkciókat nem teszi elérhetővé:

- Többsoros reguláris kifejezés (`-U`, `--multiline`)
- Helyettesítés (`-r`, `--replace`) szöveges módban (használja helyette az `vendor/bin/greph` AST-átírást)
- Egyéni típusdefiníciók (`--type-add`, `--type-clear`)
- Kódolási jelzők (`-E`, `--encoding`)
- `--pre` szűrőszkriptek
- `--sort`, `--sortr`

Ha hiányzó jelzőbe ütközik, nyisson hibajegyet az upstream `rg` ellen futtatott próbával és az elvárt kimenettel együtt. Az új funkciók az ellenőrző próbákkal együtt jelennek meg, így az ellenőrzött felület folyamatosan bővül.

## Viselkedésbeli egyezés

A burkoló viselkedésbeli, nem pedig bájtszintű egyezésre törekszik. A kimenet soronként azonos, de kozmetikai részletekben eltérhet (színkódok, terminálszélesség miatti csonkítás). A [funkciómátrix](https://greph.inline0.dev/hu/docs/advanced/feature-matrix) próbái szemantikai egyezést ellenőriznek, nem bájtról bájtra történő azonosságot.

A kimenetet feldolgozó ügynökök és eszközök számára a parser szempontjából lényeges mezők (fájlútvonal, sorszám, tartalom, egyezés pozíciója) minden ellenőrzött próbánál bájtról bájtra azonosak az upstream `rg` kimenetével.
