
# Introduktion
Greph är en ren PHP-motor för sökning i och refaktorering av källkodsträd. Den har tre närbesläktade lägen:

- **Textsökning** med grep-kompatibla utdata och ergonomi i stil med ripgrep.
- **AST-sökning** med strukturella mönster och metavariabler i PHP.
- **AST-omskrivning** med strukturell refaktorering som bevarar formateringen.

Verktyget innehåller även uppvärmda indexerade lägen för både text- och AST-arbetsbelastningar, uppdateringspolicyer som tar hänsyn till livscykeln, uppvärmda indexuppsättningar med manifest och kompatibilitetsomslag för `rg` / `sg` för verktygs- och agentmiljöer.

## Varför Greph finns

PHP-applikationer och agenter som behöver snabb kodsökning brukar anropa inbyggda verktyg via skalet (`grep`, `ripgrep`, `ast-grep`), vilket försämrar portabiliteten och försvårar driftsättningen. Strukturell sökning och omskrivning är ännu krångligare: det innebär vanligtvis att lämna PHP-processen helt.

Greph fyller den luckan. Din PHP-kod kan göra textsökningar, strukturella matchningar och refaktorerande omskrivningar med endast standardbiblioteket plus `nikic/php-parser`. Utdata och slutkoder är kompatibla med de kanoniska verktygen, så befintliga skript och agenter behöver inte ändras.

## Vad det gör

- Textsökning med fasta strängar och reguljära uttryck, med lägen för hela ord, skiftlägesokänslighet, kontext, antal och endast filer
- Strukturell PHP AST-sökning med `$VAR`, `$$$VARIADIC` och upprepade metavariabler
- Formateringsbevarande AST-omskrivning med lägen för torrkörning, interaktiv körning och skrivning
- Uppvärmda textindex (trigram + identifierarpostningar) för återkommande arbetsbelastningar
- Uppvärmt AST-faktindex och cachad AST-sökning för återkommande strukturella frågor
- Uppvärmda index med livscykelhantering: `static`, `manual-refresh`, `opportunistic-refresh`, `strict-stale-check`
- Sökning med flera index och namngivna uppsättningar bland uppvärmda text-, AST-fakta- och AST-cachelagringar
- Planeringsdiagnostik med `--trace-plan` och märkning av indexursprung för uppvärmda sökningar
- Kompatibilitetsomslag för ripgrep och ast-grep CLI som använder samma motor
- Parallell arbetsprocesspool baserad på pcntl med återgång till en enda process
- Filsökare som tar hänsyn till gitignore och `.grephignore` samt identifierar binärfiler

## Vad det kräver

- PHP 8.2 eller senare
- `ext-json`, `ext-ctype` och `ext-tokenizer`, som är aktiverade i nästan varje PHP-bygge
- `ext-zlib` för det cachade AST-lagret (`greph-index ast-cache`)
- `nikic/php-parser` (det enda Composer-beroendet)

De centrala text- och AST-funktionerna körs i ren PHP. Valfria jämförelser i prestandatester är beroende av externa verktyg som `rg`, `grep` och `sg`, men Greph behöver dem inte för att fungera. Parallella genomsökningar använder `ext-pcntl` när det är tillgängligt och återgår smidigt till en enda process när det saknas. Värdar som förbjuder `proc_open()` och `shell_exec()` behandlas i [Värdar med processbegränsningar](https://greph.inline0.dev/sv/docs/advanced/process-restricted-hosts).

## Snabbexempel

De körbara filerna `vendor/bin` behöver Greph 0.2.3 eller senare när Greph installeras som ett beroende i ditt projekt.

```bash
# Text search
vendor/bin/greph -F "function" src

# Structural search
vendor/bin/greph -p 'new $CLASS()' src

# Structural rewrite preview
vendor/bin/greph -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src
```

```php
use Greph\Greph;
use Greph\Ast\AstSearchOptions;
use Greph\Text\TextSearchOptions;

$matches = Greph::searchText(
    'function',
    'src',
    new TextSearchOptions(fixedString: true),
);

$asts = Greph::searchAst(
    'new $CLASS()',
    'src',
    new AstSearchOptions(),
);

$rewrites = Greph::rewriteAst(
    'array($$$ITEMS)',
    '[$$$ITEMS]',
    'src',
);
```

Börja med [Kom igång](https://greph.inline0.dev/sv/docs/getting-started) och använd sedan [CLI](https://greph.inline0.dev/sv/docs/cli) och [API](https://greph.inline0.dev/sv/docs/api) för resten av funktionerna. Avsnitten [Lägen](https://greph.inline0.dev/sv/docs/modes/text), [Indexerad](https://greph.inline0.dev/sv/docs/indexed/text) och [Kompatibilitet](https://greph.inline0.dev/sv/docs/compatibility/rg) går igenom särskilda arbetsflöden på djupet.
