
# Referens för CLI

Greph innehåller fyra körbara filer. Alla fyra delar samma motor; skillnaden ligger i vilket gränssnitt de erbjuder.

| Binärfil | Syfte |
|---|---|
| `greph` | Inbyggd textsökning, AST-sökning och AST-omskrivning |
| `greph-index` | Uppvärmt textindex, AST-faktindex och cachad AST-sökning |
| `rg` | Kompatibilitetsomslag i ripgrep-stil |
| `sg` | Kompatibilitetsomslag i ast-grep-stil |

Alla sökvägar i exemplen använder `./vendor/bin/<binary>`, som fungerar med Greph 0.2.3 eller senare installerade som ett beroende. Byt ut mot `./bin/<binary>` om du arbetar från en klon av kodförrådet.

---

## `greph`

Inbyggd textsökning, AST-sökning och AST-omskrivning.

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

Om en sökväg utelämnas genomsöks den aktuella katalogen.

### Textläge

Standardläge. Mönster är PCRE2-regex om inte `-F` har angetts.

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

Utdataformatet matchar `grep -rn`:

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

### AST-läge

Aktiveras med `-p`. Mönster skrivs som vanlig PHP med metanamnvariablerna `$VAR` och `$$$VARIADIC`. Se [Lägen / AST-sökning](https://greph.inline0.dev/sv/docs/modes/ast) för den fullständiga grammatiken för mönster.

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

### Omskrivningsläge

Aktiveras genom att kombinera `-p` med `-r`. Ersättningsmallen använder samma metanamnvariabler som sökmönstret; fångade noder infogas med namn.

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

### Alternativ

| Flagga | Betydelse |
|---|---|
| `-F` | Sökning efter fast sträng (inget regex) |
| `-i` | Skiftlägesokänslig matchning |
| `-w` | Matchning av hela ord |
| `-v` | Invertera matchning |
| `-c` | Räkna matchningar per fil |
| `-l` | Visa endast sökvägar till filer med matchningar |
| `-L` | Visa endast sökvägar till filer utan matchningar |
| `-h` | Dölj filnamnsprefix i textläge |
| `-H` | Visa alltid filnamnsprefix i textläge |
| `-n` | Visa radnummer (standard: på) |
| `-A N` | Visa N rader efter varje matchning |
| `-B N` | Visa N rader före varje matchning |
| `-C N` | Visa N kontextrader före och efter varje matchning |
| `-m N` | Avsluta efter N matchningar per fil |
| `-j N` | Använd N parallella arbetare |
| `-p PATTERN` | AST-sökmönster |
| `-r TEMPLATE` | AST-omskrivningsmall (kräver `-p`) |
| `--glob GLOB` | Inkludera endast filer vars sökvägar matchar GLOB |
| `--type NAME` | Inkludera ett filtypsalias (`php`, `js`, `md`, ...) |
| `--type-not NAME` | Exkludera ett filtypsalias |
| `--lang NAME` | AST-språk. Standard: `php` |
| `--json` | Skriv utdata i formatet JSON |
| `--no-ignore` | Ignorera reglerna `.gitignore` och `.grephignore` |
| `--hidden` | Inkludera dolda filer |
| `--dry-run` | Visa omskrivningar utan att skriva till filer |
| `--interactive` | Bekräfta varje omskriven fil |
| `--help` | Visa kort hjälp om användningen |

---

## `greph-index`

Uppvärmt textindex, AST-faktindex och cachad AST-sökning.

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

### Textindex

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

Textindexet är ett uppvärmt index med trigram och identifierarposteringar. Som standard finns det i `.greph-index/` i den indexerade rotkatalogen.

### Indexuppsättningar

Indexuppsättningar omvandlar återkommande arbetsflöden med flera index till ett namngivet 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 är `.greph-index-set.json`. Varje post pekar på en rot, ett läge och en livscykelprofil. `set build` och `set refresh` används för de aktiverade posterna; `set search` söker igenom de valda posterna och tar bort överlappande matchningar.

### AST-faktindex

```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-faktindexet extraherar fakta på nodnivå (anrop, instansieringar, klasser, metoder) till ett sökbart lager. Uppslag görs med O(log n) på faktanyckeln och verifieras sedan mot källkoden. Lagringsplatsen är `.greph-ast-index/` som standard.

### 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 lagrar parsade träd på disk, så att sökningar kan hoppa över parsern helt. Lagringsplatsen är `.greph-ast-cache/` som standard.

### Alternativ

Alternativen för textsökning matchar flaggorna i `greph` (`-F`, `-i`, `-w`, `-v`, `-c`, `-l`, `-L`, `-A`, `-B`, `-C`, `-m`, `--glob`, `--type`, `--type-not`, `--json`, `--no-ignore`, `--hidden`).

Ytterligare flaggor:

| Flagga | Betydelse |
|---|---|
| `--index-dir DIR` | Använd en annan katalog för uppvärmt index än standardkatalogen. Kan upprepas vid sökning i och statistik för flera index. |
| `--lifecycle PROFILE` | Byggpolicy: `static`, `manual-refresh`, `opportunistic-refresh`, `strict-stale-check` |
| `--auto-refresh-max-files N` | Tröskel för filer vid opportunistisk uppdatering |
| `--auto-refresh-max-bytes N` | Tröskel för byte vid opportunistisk uppdatering |
| `--manifest FILE` | Läs in ett manifest för indexuppsättning. Standard: `.greph-index-set.json` |
| `--mode MODE` | Begränsa åtgärder för uppsättningen till `text`, `ast-index` eller `ast-cache` |
| `--index NAME` | Begränsa åtgärder för uppsättningen till en namngiven manifestpost. Kan upprepas. |
| `--show-index-origin` | Lägg till namnet på den matchande indexposten som prefix för utdata från sökning i eller uppsättning av flera uppvärmda index |
| `--trace-plan` | Skriv ut diagnostik för den uppvärmda planeraren till `stderr` |
| `--dry-refresh` | I `stats`: rapportera vad en uppvärmd sökning skulle göra utan att ändra något |
| `--lang NAME` | AST-språk för sökningar med `ast-index` / `ast-cache`. Standard: `php` |
| `-j N`, `--jobs N` | Arbetare för AST-genomsökningar |
| `-l`, `--files-with-matches` | Visa endast sökvägar till filer med matchningar (AST-läge) |
| `--strict-parse` | Avsluta vid parseringsfel i stället för att hoppa över dem |
| `--fallback MODE` | Hantering när index saknas: `fail` (standard) eller `scan` |
| `--help` | Visa kort hjälp om användningen |

---

## `rg`

Kompatibilitetsomslag i ripgrep-stil. Stöder de vanligaste flaggorna i ripgrep. De verifierade alternativen finns i [funktionsmatrisen](https://greph.inline0.dev/sv/docs/advanced/feature-matrix).

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

### Exempel

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

### Alternativ som stöds

| Flagga | Betydelse |
|---|---|
| `-F`, `--fixed-strings` | Sökning efter fast sträng |
| `-i`, `--ignore-case` | Skiftlägesokänslig sökning |
| `-w`, `--word-regexp` | Sökning efter hela ord |
| `-v`, `--invert-match` | Invertera matchningar |
| `-c`, `--count` | Räkna matchande rader |
| `-l`, `--files-with-matches` | Visa filer med matchningar |
| `--files-without-match` | Visa filer utan matchningar |
| `-I`, `--no-filename` | Dölj filnamnsprefix |
| `-H`, `--with-filename` | Visa alltid filnamnsprefix |
| `-n`, `--line-number` | Visa radnummer |
| `-A N`, `--after-context N` | Visa N rader efter varje matchning |
| `-B N`, `--before-context N` | Visa N rader före varje matchning |
| `-C N`, `--context N` | Visa N rader före och efter varje matchning |
| `-m N`, `--max-count N` | Avsluta efter N matchningar per fil |
| `-j N`, `--threads N` | Använd N parallella arbetare |
| `-e P`, `--regexp P` | Sökmönster |
| `-L`, `--follow` | Följ symboliska länkar |
| `--glob GLOB` | Inkludera endast filer vars sökvägar matchar GLOB |
| `--type NAME` | Inkludera en filtyp |
| `--type-not NAME` | Exkludera en filtyp |
| `--json` | Skriv händelser i ripgrep-stil i JSON |
| `--no-ignore` | Ignorera reglerna `.gitignore` och `.grephignore` |
| `--hidden` | Inkludera dolda filer |
| `--files` | Visa kandidater bland filer i stället för att söka |
| `--help` | Visa kort hjälp om användningen |

---

## `sg`

Kompatibilitetsomslag i ast-grep-stil. Stöder de vanligaste flaggorna i ast-grep. De verifierade alternativen finns i [funktionsmatrisen](https://greph.inline0.dev/sv/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` är det kanoniska ast-grep-kommandot. `scan` och `rewrite` är alias som endast finns i omslaget och speglar vanligt bruk. Det går även att köra kommandot utan argument (`sg --pattern ... .`) för en engångssökning.

### Exempel

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

### Alternativ som stöds

| Flagga | Betydelse |
|---|---|
| `-p`, `--pattern PATTERN` | AST-mönster |
| `-r`, `--rewrite TEMPLATE` | Omskrivningsmall |
| `-l`, `--lang NAME` | AST-språk. Standard: `php` |
| `-j`, `--threads N` | Använd N parallella arbetare |
| `-i`, `--interactive` | Bekräfta varje omskrivning |
| `-U`, `--update-all` | Tillämpa omskrivningar utan bekräftelse |
| `--files-with-matches` | Visa endast sökvägar till filer med matchningar |
| `--json[=STYLE]` | Skriv utdata i formatet JSON. FORMAT = `pretty`, `stream` eller `compact` |
| `--no-ignore [MODE]` | Ignorera kodförrådets ignoreringsregler |
| `--hidden` | Inkludera dolda filer |
| `--glob GLOB`, `--globs GLOB` | Inkludera endast filer vars sökvägar matchar GLOB |
| `--type NAME` | Inkludera en filtyp |
| `--type-not NAME` | Exkludera en filtyp |
| `--dry-run` | Förhandsgranska omskrivningar utan att skriva till filer |
| `--help` | Visa kort hjälp om användningen |

---

## Avslutningskoder

Greph följer konventionerna för grep / ripgrep:

| Kod | Betydelse |
|---|---|
| `0` | Minst en matchning hittades (eller, vid omskrivningar, ändrades minst en fil) |
| `1` | Inga matchningar hittades |
| `2` | Användningsfel eller körtidsfel (felaktiga argument, saknat index, parseringsfel i läget `--strict-parse`) |
