
# Kompatibilitet med rg

`vendor/bin/rg` er en kompatibilitetswrapper i stil med ripgrep. Den accepterer de mest almindeligt brugte flag fra ripgrep, gennemgår filtræet på samme måde som ripgrep og udsender matchende output. De verificerede funktioner er genskabt ud fra testkørsler mod den oprindelige binære fil `rg` og findes i [Avanceret / funktionsoversigt](https://greph.inline0.dev/da/docs/advanced/feature-matrix).

Wrapperen er en tynd oversætter for CLI; selve søgningen udføres af den samme motor `Greph\Text\TextSearcher`, som `vendor/bin/greph` bruger.

## Hvornår skal den bruges

Brug wrapperen, når:

- Du har et eksisterende værktøj, en agent eller et script, der allerede kalder `rg`.
- Du ønsker en drop-in-erstatning, der fungerer i miljøer, hvor du ikke kan installere selve ripgrep (delt hosting, hærdede containere, begrænsede PaaS-miljøer).
- Du ønsker ripgrep-arbejdsgange på infrastruktur, der kun har PHP.

Brug native `vendor/bin/greph`, når:

- Du skriver ny kode og ikke har brug for formen ripgrep CLI.
- Du vil have adgang til native flag, som wrapperen ikke stiller til rådighed (f.eks. AST-tilstand).

## Brug

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

En kommando uden argumenter søger rekursivt i `.`:

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

`--files` viser mulige filer i stedet for at søge:

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

## JSON-output

`--json` udsender samme hændelsesformede data som ripgrep producerer:

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

Tidsangivelserne i objekterne `stats` rapporteres altid som nul.

Dette er det skema, som downstream-værktøjer forventer, når de aktiverer struktureret output fra ripgrep. Brug `vendor/bin/greph --json` i stedet, hvis du ønsker en enklere form.

## Verificerede funktioner

Følgende flag er verificeret mod selve `rg` i [funktionsoversigten](https://greph.inline0.dev/da/docs/advanced/feature-matrix). Både den oprindelige binære fil og wrapperen giver tilsvarende output for hver test. Hvis et flag har en kort og en lang skrivemåde, bruger testen en af dem, og wrapperen fortolker begge som den samme indstilling.

### Søgeflag

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

### Flag for filgennemgang

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

### Outputflag

- `--json`

### Accepteret uden test

Wrapperen accepterer også disse flag, men de er endnu ikke dækket af en test i funktionsoversigten:

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

## Begrænsninger

Wrapperen `rg` til Greph dækker de søge- og filgennemgangsfunktioner, som de fleste værktøjer og agenter bruger. Den stiller i øjeblikket ikke følgende funktioner fra ripgrep til rådighed:

- Multilinje-regex (`-U`, `--multiline`)
- Erstatning (`-r`, `--replace`) i teksttilstand (brug i stedet `vendor/bin/greph` til AST-omskrivning)
- Brugerdefinerede typedefinitioner (`--type-add`, `--type-clear`)
- Kodningsflag (`-E`, `--encoding`)
- Filtreringsscripts til `--pre`
- `--sort`, `--sortr`

Hvis du støder på et manglende flag, kan du oprette en sag med den test, du kørte mod den oprindelige `rg`, og det forventede output. Nye funktioner tilføjes sammen med deres referenceprøver, så de verificerede funktioner bliver udvidet.

## Adfærdsmæssig overensstemmelse

Wrapperen tilstræber adfærdsmæssig overensstemmelse, ikke byte-for-byte-overensstemmelse. Outputtet er linjeækvivalent, men kosmetiske detaljer kan variere (farvekoder, afkortning efter terminalbredde). Testene i [funktionsoversigten](https://greph.inline0.dev/da/docs/advanced/feature-matrix) kontrollerer semantisk ækvivalens, ikke bytepræcise forskelle.

For agenter og værktøjer, der fortolker output, er de felter, som parseren bruger (filsti, linjenummer, indhold, matchposition), byteidentiske med output fra den oprindelige `rg` for alle verificerede test.
