
# Compatibiliteit met sg

`vendor/bin/sg` is een compatibiliteitswrapper in de stijl van ast-grep. De wrapper accepteert de meestgebruikte `ast-grep`-vlaggen en hergebruikt dezelfde `Greph\Ast\AstSearcher`-engine als `vendor/bin/greph -p`. De geverifieerde mogelijkheden zijn overgenomen uit tests met de upstream-binary `sg` en staan in [Geavanceerd / Functiematrix](https://greph.inline0.dev/nl/docs/advanced/feature-matrix).

## Wanneer gebruik je deze?

Gebruik de wrapper wanneer:

- Je een bestaande tool, agent of script hebt dat al `sg` aanroept.
- Je een direct inzetbare vervanging wilt die werkt in omgevingen waar je `ast-grep` zelf niet kunt installeren.
- Je het gebruiksgemak van ast-grep wilt bij een installatie waarop alleen Composer beschikbaar is.

Gebruik de native `vendor/bin/greph -p` wanneer:

- Je nieuwe code schrijft en de ast-grep-vorm van CLI niet nodig hebt.
- Je dezelfde vlaggenset wilt als in de tekstmodus (de native binary verenigt beide).

## Gebruik

```bash
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
```

`run` is het canonieke ast-grep-commando. `scan` en `rewrite` zijn aliassen die alleen in de wrapper beschikbaar zijn en gangbaar gebruik weerspiegelen. Een aanroep zonder argumenten werkt als een eenmalige zoekopdracht:

```bash
./vendor/bin/sg --pattern 'array($$$ITEMS)' src
```

## Patronen

De patroongrammatica is identiek aan die van native AST-zoeken. Zie [Modi / AST-zoeken](https://greph.inline0.dev/nl/docs/modes/ast) voor de volledige referentie.

```bash
./vendor/bin/sg run --pattern 'array($$$ITEMS)' src
./vendor/bin/sg run --pattern '$obj->$method($$$ARGS)' src
./vendor/bin/sg run --pattern 'new $CLASS()' src
```

## Herschrijvingen

De wrapper ondersteunt dezelfde workflow voor proefuitvoering, interactieve bewerking en wegschrijven als native herschrijven, met vlaggen met ast-grep als naam:

```bash
# Preview only (default)
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' src

# Apply without confirmation
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --update-all src

# Confirm each match
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --interactive src

# Wrapper-only aliases
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --interactive src
```

## Uitvoer van JSON

`--json` genereert ast-grep-vormige JSON. Er worden drie stijlen ondersteund:

```bash
./vendor/bin/sg run --json --pattern 'dispatch($EVENT)' src
./vendor/bin/sg run --json=stream --pattern 'dispatch($EVENT)' src
./vendor/bin/sg run --json=compact --pattern 'dispatch($EVENT)' src
```

| Stijl | Vorm |
|---|---|
| `--json` (standaard `pretty`) | Eén fraai opgemaakte JSON-array |
| `--json=stream` | Eén overeenkomst per regel, met newlines gescheiden JSON |
| `--json=compact` | Eén compacte JSON-array |

## Geverifieerde mogelijkheden

De volgende vlaggen zijn geverifieerd met de upstream-binary `sg` in de [functiematrix](https://greph.inline0.dev/nl/docs/advanced/feature-matrix). Als een vlag twee schrijfwijzen heeft (`-p` en `--pattern`, `--glob` en `--globs`), gebruikt de test er één en verwerkt de wrapper beide als dezelfde optie.

### Patroonvlaggen

- `--pattern PATTERN` (op hoofdniveau en binnen `run`)
- `-p PATTERN` (alias)
- `--rewrite TEMPLATE`
- `-r TEMPLATE`
- `--lang NAME`, `-l NAME`

### Vlaggen voor overeenkomsten

- `--files-with-matches`
- `--json` (`pretty`, `stream`, `compact`)
- `--update-all`, `-U`

### Vlaggen voor het doorlopen van bestanden

- `--no-ignore hidden` (gecombineerde vorm)
- `--glob GLOB`, `--globs GLOB`

### Vlaggen voor workers

- `-j N`, `--threads N`

### Geaccepteerd zonder test

De wrapper accepteert deze vlaggen ook, maar er is nog geen functiematrixtest voor:

- `--no-ignore` op zichzelf, of met een andere waarde dan `hidden`
- `--type NAME`, `--type-not NAME`

### Extra opties van de wrapper

De wrapper biedt enkele hulpfuncties die ast-grep zelf niet heeft:

- Aliassen `scan` en `rewrite` voor `run`
- Vlag `--hidden` (ast-grep voegt dit samen met `--no-ignore hidden`)
- `--dry-run`-alias voor een voorbeeldweergave van herschrijvingen
- Bevestigingsworkflow voor herschrijvingen met `--interactive`

## Beperkingen

De `sg`-wrapper van Greph omvat de structurele zoek- en herschrijffuncties die de meeste tools en agents gebruiken. Deze biedt momenteel geen ondersteuning voor de volgende functies van ast-grep:

- Regelbestanden voor YAML (`--rule`, `--config`)
- Scans met meerdere talen buiten PHP
- Transformers die geen patronen gebruiken (`--debug-query`, `--inspect`)
- Integratie met LSP

Als je een ontbrekende vlag tegenkomt, dien dan een issue in met de test die je op de upstream-`sg` hebt uitgevoerd en de verwachte uitvoer.

## Gedragspariteit

De wrapper streeft naar gedragspariteit, niet naar bytepariteit. De uitvoer is semantisch gelijkwaardig, maar kan cosmetisch verschillen. De tests voor de [functiematrix](https://greph.inline0.dev/nl/docs/advanced/feature-matrix) controleren of de parserrelevante velden (bestandspad, regelnummer, vastgelegde code, captures, vorm van JSON) overeenkomen, niet de bytestroom.
