
# Kompatibilitet med rg

`vendor/bin/rg` är ett kompatibilitetsomslag i ripgrep-stil. Det tar emot de vanligaste flaggorna i ripgrep, söker igenom filträdet på samma sätt som ripgrep och skriver ut matchande resultat. De verifierade funktionerna är återgivna från testkörningar mot uppströmsversionens binärfil `rg` och finns i [Avancerat / funktionsmatris](https://greph.inline0.dev/sv/docs/advanced/feature-matrix).

Omslaget är en tunn översättare av CLI; själva sökningen utförs av samma motor i `Greph\Text\TextSearcher` som `vendor/bin/greph` använder.

## När du ska använda det

Använd omslaget när:

- Du har ett befintligt verktyg, en agent eller ett skript som redan anropar `rg`.
- Du vill ha en direkt ersättare som fungerar i miljöer där du inte kan installera ripgrep självt (delad hosting, härdade containrar, begränsade PaaS-miljöer).
- Du vill ha ripgrep-ergonomi på infrastruktur där endast PHP finns.

Använd inbyggda `vendor/bin/greph` när:

- Du skriver ny kod och inte behöver formen ripgrep CLI.
- Du vill använda inbyggda flaggor som omslaget inte erbjuder (till exempel AST-läge).

## Användning

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

Ett kommando utan argument genomsöker `.` rekursivt:

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

`--files` visar kandidater bland filer i stället för att söka:

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

## Utdata från JSON

`--json` skickar ut samma händelseformade innehåll som ripgrep producerar:

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

Tiderna i objekten `stats` rapporteras alltid som noll.

Det här är schemat som nedströmsverktyg förväntar sig när de aktiverar den strukturerade utdatafunktionen för ripgrep. Använd `vendor/bin/greph --json` i stället om du vill ha en enklare struktur.

## Verifierade funktioner

Följande flaggor har verifierats mot själva `rg` i [funktionsmatrisen](https://greph.inline0.dev/sv/docs/advanced/feature-matrix). Den uppströms binärfilen och omslaget ger likvärdig utdata för varje test. Om en flagga har en kort och en lång stavning använder testet den ena, och omslaget tolkar båda som samma alternativ.

### Sökflaggor

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

### Genomsökningsflaggor

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

### Utdataflaggor

- `--json`

### Accepteras utan test

Omslaget accepterar även dessa flaggor, men ingen testkörning för funktionsmatrisen täcker dem ännu:

- `-j N`, `--threads N` (antal arbetare, se [Parallella arbetare](https://greph.inline0.dev/sv/docs/advanced/parallel))
- `-q`, `--quiet`
- `--no-follow`

## Begränsningar

Omslaget för Greph `rg` täcker sök- och genomsökningsfunktionerna som används av de flesta verktyg och agenter. Följande ripgrep-funktioner är för närvarande inte tillgängliga:

- Flerradiga regex (`-U`, `--multiline`)
- Ersättning (`-r`, `--replace`) i textläge (använd AST-omskrivning med `vendor/bin/greph` i stället)
- Anpassade typdefinitioner (`--type-add`, `--type-clear`)
- Kodningsflaggor (`-E`, `--encoding`)
- Filter för skript med `--pre`
- `--sort`, `--sortr`

Om du stöter på en flagga som saknas kan du skapa ett ärende med testkörningen du gjorde mot uppströmsversionen av `rg` och den förväntade utdatan. Nya funktioner läggs till tillsammans med sina jämförelsetester, så att de verifierade funktionerna fortsätter att utökas.

## Beteendeparitet

Omslaget eftersträvar beteendeparitet, inte byteparitet. Utdata motsvarar varandra rad för rad, men kosmetiska detaljer kan skilja sig (färgkoder, trunkering efter terminalbredd). Testerna i [funktionsmatrisen](https://greph.inline0.dev/sv/docs/advanced/feature-matrix) kontrollerar semantisk likvärdighet, inte exakta byteskillnader.

För agenter och verktyg som tolkar utdata är fälten som är relevanta för parsern (filsökväg, radnummer, innehåll, matchningsposition) byteidentiska med uppströmsversionen av `rg` i varje verifierat test.
