
# Kompatibilitet med sg

`vendor/bin/sg` er en kompatibilitetswrapper i stil med ast-grep. Den accepterer de mest almindeligt brugte flag fra `ast-grep` og genbruger den samme motor `Greph\Ast\AstSearcher`, som `vendor/bin/greph -p` bruger. De verificerede funktioner er genskabt ud fra testkørsler mod den oprindelige binære fil `sg` og findes i [Avanceret / funktionsoversigt](https://greph.inline0.dev/da/docs/advanced/feature-matrix).

## Hvornår skal den bruges

Brug wrapperen, når:

- Du har et eksisterende værktøj, en agent eller et script, der allerede kalder `sg`.
- Du ønsker en drop-in-erstatning, der fungerer i miljøer, hvor du ikke kan installere `ast-grep`.
- Du ønsker en ast-grep-arbejdsgang fra en installation, der kun indeholder Composer.

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

- Du skriver ny kode og ikke har brug for formen ast-grep CLI.
- Du vil have samme sæt flag som i teksttilstand (den native binære fil samler begge tilstande).

## Brug

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

`run` er den kanoniske kommando for ast-grep. `scan` og `rewrite` er aliaser, der kun findes i wrapperen, og som afspejler almindelig brug. Det fungerer også at køre kommandoen uden argumenter for at søge én gang:

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

## Mønstre

Grammatikken for mønstre er identisk med den native AST-søgning. Se [Tilstande / AST-søgning](https://greph.inline0.dev/da/docs/modes/ast) for den fulde reference.

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

## Omskrivninger

Wrapperen understøtter samme arbejdsgang med prøvekørsel, interaktion og skrivning som den native omskrivning, med flagnavne fra 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
```

## JSON-output

`--json` udsender ast-grep-formede JSON. Der understøttes tre formater:

```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 | Form |
|---|---|
| `--json` (standard `pretty`) | Én pænt formateret JSON-array |
| `--json=stream` | Ét match pr. linje, linjeafgrænset JSON |
| `--json=compact` | Ét kompakt JSON-array |

## Verificerede funktioner

Følgende flag er verificeret mod den oprindelige binære fil `sg` i [funktionsoversigten](https://greph.inline0.dev/da/docs/advanced/feature-matrix). Hvis et flag har to skrivemåder (`-p` og `--pattern`, `--glob` og `--globs`), bruger testen en af dem, og wrapperen fortolker begge som den samme indstilling.

### Mønsterflag

- `--pattern PATTERN` (på øverste niveau og inde i `run`)
- `-p PATTERN` (alias)
- `--rewrite TEMPLATE`
- `-r TEMPLATE`
- `--lang NAME`, `-l NAME`

### Matchflag

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

### Flag for filgennemgang

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

### Arbejderflag

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

### Accepteret uden test

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

- `--no-ignore` alene eller med en anden værdi end `hidden`
- `--type NAME`, `--type-not NAME`

### Ekstra indstillinger kun til wrapperen

Wrapperen stiller nogle få hjælpefunktioner til rådighed, som selve ast-grep ikke har:

- `scan`- og `rewrite`-aliaser til `run`
- Flaget `--hidden` (ast-grep samler dette under `--no-ignore hidden`)
- `--dry-run`-alias til forhåndsvisning af omskrivninger
- `--interactive`-arbejdsgang til bekræftelse af omskrivninger

## Begrænsninger

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

- Regel-filer fra YAML (`--rule`, `--config`)
- Søgning i flere sprog ud over PHP
- Transformere, der ikke bruger mønstre (`--debug-query`, `--inspect`)
- LSP-integration

Hvis du støder på et manglende flag, kan du oprette en sag med den test, du kørte mod den oprindelige `sg`, og det forventede output.

## Adfærdsmæssig overensstemmelse

Wrapperen tilstræber adfærdsmæssig overensstemmelse, ikke byte-for-byte-overensstemmelse. Outputtet er semantisk ækvivalent, men kosmetiske detaljer kan variere. Testene i [funktionsoversigten](https://greph.inline0.dev/da/docs/advanced/feature-matrix) kontrollerer, at de parserrelevante felter (filsti, linjenummer, registreret kode, registreringer, JSON-form) er ækvivalente, ikke at bytestrømmen er identisk.
