
# CLI Reference

Greph leveres med fire eksekverbare filer. De bruger alle den samme motor; forskellen ligger i den grænseflade, de stiller til rådighed.

| Eksekverbar fil | Formål |
|---|---|
| `greph` | Native tekstsøgninger, AST-søgninger og AST-omskrivninger |
| `greph-index` | Opvarmet tekstindeks, AST-faktaindeks og cachelagret AST-søgning |
| `rg` | Kompatibilitetswrapper i stil med ripgrep |
| `sg` | Kompatibilitetswrapper i stil med ast-grep |

Alle stier i eksemplerne bruger `./vendor/bin/<binary>`, som fungerer med Greph 0.2.3 eller nyere installeret som afhængighed. Erstat med `./bin/<binary>`, hvis du arbejder fra en klon af repositoriet.

---

## `greph`

Native tekstsøgninger, AST-søgninger og AST-omskrivninger.

```bash
greph [options] pattern [path...]
greph -p pattern [options] [path...]
greph -p pattern -r replacement [options] [path...]
```

Hvis en sti udelades, søges der i den aktuelle mappe.

### Teksttilstand

Standardtilstand. Mønstre er PCRE2-regexer, medmindre `-F` er angivet.

```bash
# Regex search
./vendor/bin/greph "function\s+\w+" src

# Fixed-string search
./vendor/bin/greph -F "function" src

# Case-insensitive whole-word with two lines of context
./vendor/bin/greph -F -i -w -C 2 "function" src
```

Outputformatet svarer til `grep -rn`:

```text
src/Greph.php:31:final class Greph
src/Greph.php:36:    public static function walk(...
```

### AST-tilstand

Aktiveres med `-p`. Mønstre skrives som almindelig PHP med metavariablerne `$VAR` og `$$$VARIADIC`. Se [Tilstande / AST-søgning](https://greph.inline0.dev/da/docs/modes/ast) for den fulde grammatik for mønstre.

```bash
./vendor/bin/greph -p 'new $CLASS()' src
./vendor/bin/greph -p '$obj->$method($$$ARGS)' src
./vendor/bin/greph -p 'function $name($$$PARAMS): void {}' src
```

### Omskrivningstilstand

Aktiveres ved at kombinere `-p` med `-r`. Erstatningsskabelonen bruger de samme metavariabler som søgemønstret; registrerede noder indsættes efter navn.

```bash
# Preview only
./vendor/bin/greph -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src

# Apply
./vendor/bin/greph -p 'array($$$ITEMS)' -r '[$$$ITEMS]' src

# Confirm each file before writing
./vendor/bin/greph -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --interactive src
```

### Indstillinger

| Flag | Betydning |
|---|---|
| `-F` | Søg efter faste strenge (ingen regex) |
| `-i` | Match uden forskel på store og små bogstaver |
| `-w` | Match hele ord |
| `-v` | Inverter match |
| `-c` | Tæl match pr. fil |
| `-l` | Vis kun stier til filer med match |
| `-L` | Vis kun stier til filer uden match |
| `-h` | Undertryk filnavnspræfikser i teksttilstand |
| `-H` | Vis altid filnavnspræfikser i teksttilstand |
| `-n` | Vis linjenumre (standard: til) |
| `-A N` | Vis N linjer efter hvert match |
| `-B N` | Vis N linjer før hvert match |
| `-C N` | Vis N kontekstlinjer før og efter hvert match |
| `-m N` | Stop efter N match pr. fil |
| `-j N` | Brug N parallelle arbejdere |
| `-p PATTERN` | AST-søgemønster |
| `-r TEMPLATE` | AST-omskrivningsskabelon (kræver `-p`) |
| `--glob GLOB` | Medtag kun filer, hvis stier matcher GLOB |
| `--type NAME` | Medtag et alias for en filtype (`php`, `js`, `md`, ...) |
| `--type-not NAME` | Udelad et alias for en filtype |
| `--lang NAME` | AST-sprog. Standard: `php` |
| `--json` | Generér output i JSON-format |
| `--no-ignore` | Ignorer reglerne for `.gitignore` og `.grephignore` |
| `--hidden` | Medtag skjulte filer |
| `--dry-run` | Vis omskrivninger uden at skrive til filer |
| `--interactive` | Bekræft hver omskrevet fil |
| `--help` | Vis brug direkte i terminalen |

---

## `greph-index`

Opvarmet tekstindeks, AST-faktaindeks og cachelagret AST-søgning.

```bash
greph-index build [path] [--index-dir DIR]
greph-index refresh [path] [--index-dir DIR]
greph-index search [options] pattern [path...]

greph-index set build [manifest] [--manifest FILE] [--mode MODE] [--index NAME...]
greph-index set refresh [manifest] [--manifest FILE] [--mode MODE] [--index NAME...]
greph-index set stats [manifest] [--manifest FILE] [--mode MODE] [--index NAME...] [--dry-refresh]
greph-index set search [options] pattern [path...]

greph-index ast-index build [path] [--index-dir DIR]
greph-index ast-index refresh [path] [--index-dir DIR]
greph-index ast-index search [options] pattern [path...]

greph-index ast-cache build [path] [--index-dir DIR]
greph-index ast-cache refresh [path] [--index-dir DIR]
greph-index ast-cache search [options] pattern [path...]
```

### Tekstindeks

```bash
# Build (full)
./vendor/bin/greph-index build .

# Build with lifecycle policy
./vendor/bin/greph-index build . \
  --lifecycle opportunistic-refresh \
  --auto-refresh-max-files 32 \
  --auto-refresh-max-bytes 1048576

# Refresh (incremental: added, updated, deleted, unchanged)
./vendor/bin/greph-index refresh .

# Query
./vendor/bin/greph-index search -F "function" .
./vendor/bin/greph-index search -i -w "function" .
./vendor/bin/greph-index search -c "function" .
./vendor/bin/greph-index search --trace-plan -F "function" .
./vendor/bin/greph-index search -F "function" . \
  --index-dir core/.greph-index \
  --index-dir plugins/demo/.greph-index \
  --show-index-origin
```

Tekstindekset er et opvarmet lager med trigrammer og identifikatorforekomster. Det ligger som standard i `.greph-index/` i den indekserede rodmappe.

### Indekssæt

Indekssæt samler gentagne arbejdsgange med flere indeks i et navngivet manifest:

```bash
./vendor/bin/greph-index set build
./vendor/bin/greph-index set stats --dry-refresh
./vendor/bin/greph-index set search --show-index-origin -F "function" .
./vendor/bin/greph-index set search --mode ast-index 'new $CLASS()' .
./vendor/bin/greph-index set search --mode ast-cache 'array($$$ITEMS)' .
```

Standardmanifestfilen er `.greph-index-set.json`. Hver post peger på en rodmappe, en tilstand og en livscyklusprofil. `set build` og `set refresh` arbejder på de aktiverede poster; `set search` kører på tværs af de valgte poster og fjerner dubletter blandt overlappende match.

### AST-faktaindeks

```bash
./vendor/bin/greph-index ast-index build .
./vendor/bin/greph-index ast-index refresh .
./vendor/bin/greph-index ast-index search 'new $CLASS()' src
./vendor/bin/greph-index ast-index search --trace-plan 'new $CLASS()' src
./vendor/bin/greph-index ast-index search 'new $CLASS()' . \
  --index-dir core/.greph-ast-index \
  --index-dir plugins/demo/.greph-ast-index \
  --show-index-origin
```

AST-faktaindekset udtrækker fakta på nodeniveau (kald, instansieringer, klasser, metoder) til et søgbart lager. Opslag foretages med O(log n) på faktanøglen og verificeres derefter mod kilden. Lagres som standard i `.greph-ast-index/`.

### AST-cache

```bash
./vendor/bin/greph-index ast-cache build .
./vendor/bin/greph-index ast-cache refresh .
./vendor/bin/greph-index ast-cache search 'array($$$ITEMS)' src
./vendor/bin/greph-index ast-cache search --trace-plan 'array($$$ITEMS)' src
```

AST-cachen gemmer parsede træer på disk, så søgninger springer parseren helt over. Gemmes som standard i `.greph-ast-cache/`.

### Indstillinger

Indstillingerne for tekstsøgning svarer til flagene i `greph` (`-F`, `-i`, `-w`, `-v`, `-c`, `-l`, `-L`, `-A`, `-B`, `-C`, `-m`, `--glob`, `--type`, `--type-not`, `--json`, `--no-ignore`, `--hidden`).

Yderligere flag:

| Flag | Betydning |
|---|---|
| `--index-dir DIR` | Brug en anden opvarmet indeksmappe end standardmappen. Kan gentages til søgning og statistik med flere indeks. |
| `--lifecycle PROFILE` | Byggepolitik: `static`, `manual-refresh`, `opportunistic-refresh`, `strict-stale-check` |
| `--auto-refresh-max-files N` | Grænse for filer ved opportunistisk opdatering |
| `--auto-refresh-max-bytes N` | Grænse for byte ved opportunistisk opdatering |
| `--manifest FILE` | Indlæs et manifest for indekssæt. Standard: `.greph-index-set.json` |
| `--mode MODE` | Begræns handlinger på sæt til `text`, `ast-index` eller `ast-cache` |
| `--index NAME` | Begræns handlinger på sæt til en navngiven manifestpost. Kan gentages. |
| `--show-index-origin` | Sæt præfiks med navnet på den matchende indeksindtastning foran output fra søgninger med opvarmet indeks eller indekssæt |
| `--trace-plan` | Send diagnostik fra den opvarmede planlægger til `stderr` |
| `--dry-refresh` | I `stats`: rapportér, hvad en søgning med opvarmet indeks ville gøre, uden at ændre noget |
| `--lang NAME` | AST-sprog til søgninger med `ast-index` / `ast-cache`. Standard: `php` |
| `-j N`, `--jobs N` | Arbejdere til AST-gennemgange |
| `-l`, `--files-with-matches` | Vis kun stier til filer med match (AST-tilstand) |
| `--strict-parse` | Afbryd ved parsefejl i stedet for at springe dem over |
| `--fallback MODE` | Håndtering af manglende indeks: `fail` (standard) eller `scan` |
| `--help` | Vis brug direkte i terminalen |

---

## `rg`

Kompatibilitetswrapper i stil med ripgrep. Understøtter de mest almindeligt brugte ripgrep-flag. De verificerede funktioner er offentliggjort i [funktionsoversigten](https://greph.inline0.dev/da/docs/advanced/feature-matrix).

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

### Eksempler

```bash
./vendor/bin/rg -F "function" src
./vendor/bin/rg --json -F "function" src
./vendor/bin/rg --files src
./vendor/bin/rg --files --type php .
./vendor/bin/rg --type-not js -F "function" .
```

### Understøttede indstillinger

| Flag | Betydning |
|---|---|
| `-F`, `--fixed-strings` | Søg efter faste strenge |
| `-i`, `--ignore-case` | Søg uden forskel på store og små bogstaver |
| `-w`, `--word-regexp` | Søg efter hele ord |
| `-v`, `--invert-match` | Inverter match |
| `-c`, `--count` | Tæl linjer med match |
| `-l`, `--files-with-matches` | Vis filer med match |
| `--files-without-match` | Vis filer uden match |
| `-I`, `--no-filename` | Undertryk filnavnspræfikser |
| `-H`, `--with-filename` | Vis altid filnavnspræfikser |
| `-n`, `--line-number` | Vis linjenumre |
| `-A N`, `--after-context N` | Vis N linjer efter hvert match |
| `-B N`, `--before-context N` | Vis N linjer før hvert match |
| `-C N`, `--context N` | Vis N linjer før og efter hvert match |
| `-m N`, `--max-count N` | Stop efter N match pr. fil |
| `-j N`, `--threads N` | Brug N parallelle arbejdere |
| `-e P`, `--regexp P` | Søgemønster |
| `-L`, `--follow` | Følg symbolske links |
| `--glob GLOB` | Medtag kun filer, hvis stier matcher GLOB |
| `--type NAME` | Medtag en filtype |
| `--type-not NAME` | Udelad en filtype |
| `--json` | Generér ripgrep-lignende JSON-hændelser |
| `--no-ignore` | Ignorer reglerne for `.gitignore` og `.grephignore` |
| `--hidden` | Medtag skjulte filer |
| `--files` | Vis mulige filer i stedet for at søge |
| `--help` | Vis brug direkte i terminalen |

---

## `sg`

Kompatibilitetswrapper i stil med ast-grep. Understøtter de mest almindeligt brugte ast-grep-flag. De verificerede funktioner er offentliggjort i [funktionsoversigten](https://greph.inline0.dev/da/docs/advanced/feature-matrix).

```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 (`sg --pattern ... .`) for at søge én gang.

### Eksempler

```bash
./vendor/bin/sg run --pattern 'array($$$ITEMS)' src/App.php
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' src/App.php
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --update-all src/App.php
./vendor/bin/sg run --json --pattern 'dispatch($EVENT)' src/App.php
./vendor/bin/sg scan -p 'array($$$ITEMS)' src/App.php
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src/App.php
```

### Understøttede indstillinger

| Flag | Betydning |
|---|---|
| `-p`, `--pattern PATTERN` | AST-mønster |
| `-r`, `--rewrite TEMPLATE` | Omskrivningsskabelon |
| `-l`, `--lang NAME` | AST-sprog. Standard: `php` |
| `-j`, `--threads N` | Brug N parallelle arbejdere |
| `-i`, `--interactive` | Bekræft hver omskrivning |
| `-U`, `--update-all` | Anvend omskrivninger uden bekræftelse |
| `--files-with-matches` | Vis kun stier til filer med match |
| `--json[=STYLE]` | Generér output i JSON-format. STYLE = `pretty`, `stream` eller `compact` |
| `--no-ignore [MODE]` | Ignorer repositoriets ignoreringsregler |
| `--hidden` | Medtag skjulte filer |
| `--glob GLOB`, `--globs GLOB` | Medtag kun filer, hvis stier matcher GLOB |
| `--type NAME` | Medtag en filtype |
| `--type-not NAME` | Udelad en filtype |
| `--dry-run` | Forhåndsvis omskrivninger uden at skrive til filer |
| `--help` | Vis brug direkte i terminalen |

---

## Afslutningskoder

Greph følger konventionerne for grep / ripgrep:

| Kode | Betydning |
|---|---|
| `0` | Mindst ét match blev fundet (eller mindst én fil blev ændret ved omskrivning) |
| `1` | Ingen match fundet |
| `2` | Fejl i brug eller under kørsel (forkerte argumenter, manglende indeks, parsefejl i tilstanden `--strict-parse`) |
