
# Kompatibilitet med sg

`vendor/bin/sg` är ett kompatibilitetsomslag i ast-grep-stil. Det tar emot de vanligaste flaggorna i `ast-grep` och återanvänder samma `Greph\Ast\AstSearcher`-motor som `vendor/bin/greph -p` använder. De verifierade funktionerna är återgivna från testkörningar mot uppströmsversionens binärfil `sg` och finns i [Avancerat / funktionsmatris](https://greph.inline0.dev/sv/docs/advanced/feature-matrix).

## 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 `sg`.
- Du vill ha en direkt ersättare som fungerar i miljöer där du inte kan installera `ast-grep` självt.
- Du vill ha ast-grep-ergonomi från en installation med endast Composer.

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

- Du skriver ny kod och inte behöver formen ast-grep CLI.
- Du vill ha samma flagguppsättning som i textläge (den inbyggda binärfilen förenar båda).

## Användning

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

`run` är det kanoniska ast-grep-kommandot. `scan` och `rewrite` är alias som endast finns i omslaget och speglar vanligt bruk. Det går att köra kommandot utan argument för en engångssökning:

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

## Mönster

Grammatiken för mönster är identisk med den inbyggda AST-sökningen. Se [Lägen / AST-sökning](https://greph.inline0.dev/sv/docs/modes/ast) för den fullständiga referensen.

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

## Omskrivningar

Omslaget stöder samma arbetsflöde med torrkörning, interaktiv körning och skrivning som den inbyggda omskrivningen, med flaggnamn i ast-grep:

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

## Utdata från JSON

`--json` skickar ut ast-grep-formade JSON. Tre format stöds:

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

| Format | Struktur |
|---|---|
| `--json` (standard: `pretty`) | En enda snyggt formaterad JSON-array |
| `--json=stream` | En matchning per rad, avgränsad med radbrytningar JSON |
| `--json=compact` | En enda kompakt JSON-array |

## Verifierade funktioner

Följande flaggor har verifierats mot uppströmsversionens binärfil `sg` i [funktionsmatrisen](https://greph.inline0.dev/sv/docs/advanced/feature-matrix). Om en flagga har två stavningar (`-p` och `--pattern`, `--glob` och `--globs`) använder testet den ena, och omslaget tolkar båda som samma alternativ.

### Mönsterflaggor

- `--pattern PATTERN` (på toppnivå och inuti `run`)
- `-p PATTERN` (alias)
- `--rewrite TEMPLATE`
- `-r TEMPLATE`
- `--lang NAME`, `-l NAME`

### Matchningsflaggor

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

### Genomsökningsflaggor

- `--no-ignore hidden` (kombinerad form)
- `--glob GLOB`, `--globs GLOB`

### Arbetarflaggor

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

### Accepteras utan test

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

- `--no-ignore` för sig, eller med ett annat värde än `hidden`
- `--type NAME`, `--type-not NAME`

### Extra funktioner endast i omslaget

Omslaget erbjuder några hjälpfunktioner som ast-grep självt saknar:

- Aliasen `scan` och `rewrite` för `run`
- Flaggan `--hidden` (ast-grep inkluderar den i `--no-ignore hidden`)
- Alias för förhandsgranskning av omskrivningar: `--dry-run`
- Flöde för att bekräfta omskrivningar med `--interactive`

## Begränsningar

Omslaget för Greph `sg` täcker de strukturella sök- och omskrivningsfunktioner som används av de flesta verktyg och agenter. Följande ast-grep-funktioner är för närvarande inte tillgängliga:

- Regel-filer för YAML (`--rule`, `--config`)
- Genomsökning av flera språk utöver PHP
- Transformering utan mönster (`--debug-query`, `--inspect`)
- LSP-integration

Om du stöter på en flagga som saknas kan du skapa ett ärende med testkörningen du gjorde mot uppströmsversionen av `sg` och den förväntade utdatan.

## Beteendeparitet

Omslaget eftersträvar beteendeparitet, inte byteparitet. Utdata är semantiskt likvärdig men kan skilja sig i kosmetiska detaljer. Testerna i [funktionsmatrisen](https://greph.inline0.dev/sv/docs/advanced/feature-matrix) kontrollerar att parserrelevanta fält (filsökväg, radnummer, fångad kod, fångster, strukturen för JSON) är likvärdiga, inte att byteströmmen är identisk.
