
# Funktionsmatris

Funktionsmatrisen är en genererad rapport som för varje flagga och beteende som stöds registrerar om det inbyggda verktyget och omslaget Greph ger likvärdiga utdata. Den är facit för frågor av typen ”har Greph stöd för detta?”.

Matrisen genereras på nytt från verkliga kommandoprobningar mot en deterministisk testmiljö. Råunderlaget finns i [`FEATURE_MATRIX.json`](https://github.com/inline0/greph/blob/main/FEATURE_MATRIX.json) och den återgivna tabellen finns i [`FEATURE_MATRIX.md`](https://github.com/inline0/greph/blob/main/FEATURE_MATRIX.md).

## Statusförklaring

| Status | Betydelse |
|---|---|
| `Pass` | Proben kördes och motsvarade det förväntade beteendet |
| `Fail` | Proben kördes men uppfyllde inte det förväntade beteendet |
| `Unavailable` | Leverantörskommandot fanns inte i den här miljön |

## Avsnitt

Matrisen är indelad i sex avsnitt:

1. **rg-kompatibilitetsyta**: varje probe körs både mot den uppströmsbaserade binärfilen `rg` och `bin/rg`. Båda måste `Pass` för att raden ska markeras som stödd.
2. **sg-kompatibilitetsyta**: varje probe körs både mot den uppströmsbaserade binärfilen `sg` och `bin/sg`. Båda måste `Pass` för att raden ska markeras som stödd.
3. **Yta som bara finns i sg-omslaget**: prober som endast riktar sig mot `bin/sg` (funktioner som omslaget exponerar men som ast-grep självt saknar).
4. **Inbyggd greph-yta**: prober som testar `bin/greph` direkt. Det finns inget uppströmsverktyg att jämföra med; proberna kontrollerar det förväntade beteendet i testmiljön.
5. **Indexerad greph-yta**: prober som testar `bin/greph-index` (bygge, uppdatering och uppvärmd textsökning).
6. **Indexerad AST-biblioteksyta**: prober som anropar PHP API (`Greph::buildAstIndex()`, `Greph::searchAstIndexed()`, `Greph::buildAstCache()`, `Greph::searchAstCached()`) och kontrollerar bygge, sökning och uppdatering.

## Skapa om matrisen

```bash
php bin/feature-matrix
```

Kör från en klon av repot med `rg` och `sg` på `PATH`; `bin/feature-matrix` ingår inte i paketet Composer. Skriptet bygger testmiljön, kör varje kompatibilitetsprobe mot den uppströmsbaserade binärfilen (om den är installerad) och omslaget Greph, registrerar det strukturerade resultatet och skriver både `FEATURE_MATRIX.json` och `FEATURE_MATRIX.md`. Ange `--stdout` för att skriva ut Markdown utan att skriva någon av filerna.

De incheckade filerna genereras om manuellt; CI genererar dem inte. Testsviten PHPUnit som CI kör innehåller ett test som skapar matrisen med uppströmsverktygen markerade som otillgängliga och kontrollerar rapportens struktur. Därför leder en enskild probe som börjar misslyckas inte till att CI misslyckas. Generera om matrisen och granska diffen före en version.

## Vad som hör hemma i matrisen respektive dokumentationen

Referensen CLI och sidorna [Kompatibilitet / rg](https://greph.inline0.dev/sv/docs/compatibility/rg) samt [Kompatibilitet / sg](https://greph.inline0.dev/sv/docs/compatibility/sg) beskriver den *avsedda* funktionsytan. Funktionsmatrisen registrerar den *verifierade* funktionsytan, med de exakta probe-argumenten intill varje rad.

Om något är dokumenterat men saknas i matrisen är dokumentationen inaktuell. Om något finns i matrisen men inte är dokumenterat behöver dokumentationen kompletteras. De ska stämma överens.

## Exempelrader

### rg-kompatibilitet (utdrag)

| Funktion | rg | bin/rg | Anteckningar |
|---|---|---|---|
| Sökning med fast sträng | Godkänt | Godkänt | Probe: `-F needle single.txt` |
| Sökning med fast sträng utan hänsyn till skiftläge | Godkänt | Godkänt | Probe: `-F -i needle single.txt` |
| Helordsökning | Godkänt | Godkänt | Probe: `-F -w needle words.txt` |
| Globfilter | Godkänt | Godkänt | Probe: `--glob *.php function .` |
| Dolda filer | Godkänt | Godkänt | Probe: `--hidden -F secret .` |
| Strukturerad JSON-utdata | Godkänt | Godkänt | Probe: `--json -F needle single.txt` med händelsesemantik för ripgrep JSON |

### sg-kompatibilitet (utdrag)

| Funktion | sg | bin/sg | Anteckningar |
|---|---|---|---|
| Mönstersökning med `run --pattern` | Godkänt | Godkänt | Probe: `run --pattern array($$$ITEMS) src/App.php` |
| Omskrivning med `run --rewrite` | Godkänt | Godkänt | Probe: `run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] src/App.php` |
| Strukturerad strömutdata JSON | Godkänt | Godkänt | Probe: `run --json=stream --pattern dispatch($EVENT) src/App.php` |
| Skriv om alla | Godkänt | Godkänt | Probe: `run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] --update-all src/App.php` |

För hela tabellen, se [`FEATURE_MATRIX.md`](https://github.com/inline0/greph/blob/main/FEATURE_MATRIX.md).

## Varför probstyrt

En kompatibilitetstabell som underhålls för hand blir inaktuell. Hela poängen med omslagen är att ”ersätta anropen till `rg` eller `sg` med dem och fortsätta arbeta som vanligt”. Det enda sättet att hålla det löftet är att faktiskt köra uppströmsverktyget och omslaget sida vid sida och jämföra resultaten. Proberunnern gör just det varje gång matrisen genereras om.
