
# Sissejuhatus
Greph on puhas PHP-i otsingu- ja refaktoreerimismootor lähtefailipuude jaoks. See pakub kolme seotud režiimi:

- **Tekstiotsing** grep-iga ühilduva väljundi ja ripgrep-laadse kasutusmugavusega.
- **AST-otsing** PHP struktuursete mustrite ja metamuutujatega.
- **AST-ümberkirjutus** vormingut säilitava struktuurse refaktoreerimisega.

Lisaks on saadaval soojendatud indekseeritud režiimid nii teksti- kui ka AST-töökoormustele, elutsükliteadlikud värskenduspoliitikad, manifestipõhised soojendatud registrikomplektid ning `rg` / `sg` ühilduvuskihid tööriistade ja agentide keskkondade jaoks.

## Miks Greph olemas on

PHP rakendused ja agendid, mis vajavad kiiret koodiotsingut, käivitavad tavaliselt käsurealt natiivseid tööriistu (`grep`, `ripgrep`, `ast-grep`), kaotades kaasaskantavuse ja lisades juurutamisele hõõrdumist. Struktuurne otsing ja ümberkirjutamine on veelgi keerulisem: tavaliselt tuleb selleks PHP protsessist täielikult väljuda.

Greph kõrvaldab selle puudujäägi. Teie PHP kood saab teha tekstiotsinguid, leida struktuurivasteid ja kirjutada ümber refaktoreeritud koodi, kasutades ainult standardteeki ja `nikic/php-parser`. Väljund ja väljumiskoodid ühilduvad kanooniliste tööriistadega, nii et olemasolevaid skripte ja agente pole vaja muuta.

## Mida see teeb

- Fikseeritud stringide ja regulaaravaldiste otsing koos terve sõna, tõstutundetuse, konteksti, loenduse ja ainult failide režiimidega
- Struktuurne PHP AST-otsing koos `$VAR`, `$$$VARIADIC` ja korduvate metamuutujatega
- Vormingut säilitav AST-ümberkirjutus proovikäivituse, interaktiivse ja kirjutamisrežiimiga
- Soojendatud tekstiindeksid (trigramm + identifikaatorite loendid) korduvate töökoormuste jaoks
- Soojendatud AST faktiregister ja vahemällu salvestatud AST-otsing korduvate struktuuripäringute jaoks
- Elutsükliteadlikud soojendatud registrid: `static`, `manual-refresh`, `opportunistic-refresh`, `strict-stale-check`
- Mitme registri ja nimega komplektide otsing soojendatud teksti-, AST faktide ja AST vahemälu hoidlates
- Plaanuri diagnostika käsuga `--trace-plan` ning registri päritolu märgendamine soojendatud otsingute jaoks
- Samal mootoril põhinevad ripgrep ja ast-grep CLI ühilduvuskihid
- pcntl-põhine paralleeltöötajate kogum ühe protsessi varuvariandiga
- gitignore’i ja `.grephignore` arvestav failide läbikäija binaarfailide tuvastusega

## Nõuded

- PHP 8.2 või uuem
- `ext-json`, `ext-ctype` ja `ext-tokenizer`, mis on lubatud peaaegu igas PHP järgus
- `ext-zlib` vahemällu salvestatud AST hoidla jaoks (`greph-index ast-cache`)
- `nikic/php-parser` (ainus Composer sõltuvus)

Põhilised teksti- ja AST-funktsioonid töötavad puhtas PHP-is. Valikulised võrdlusuuringud sõltuvad välistest tööriistadest nagu `rg`, `grep` ja `sg`, kuid Greph ise ei vaja neid. Paralleelsed skannimised kasutavad võimaluse korral `ext-pcntl` ja jätkavad muul juhul sujuvalt tööd ühe protsessiga. Hostide kohta, kus `proc_open()` ja `shell_exec()` on keelatud, leiate teavet jaotisest [Protsessipiirangutega hostid](https://greph.inline0.dev/et/docs/advanced/process-restricted-hosts).

## Kiire näide

Täitmisfailid `vendor/bin` vajavad Greph 0.2.3 või uuemat, kui Greph paigaldatakse projekti sõltuvusena.

```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',
);
```

Alustage jaotisest [Alustamine](https://greph.inline0.dev/et/docs/getting-started), seejärel tutvuge ülejäänud funktsionaalsusega jaotistes [CLI](https://greph.inline0.dev/et/docs/cli) ja [API](https://greph.inline0.dev/et/docs/api). Jaotised [Režiimid](https://greph.inline0.dev/et/docs/modes/text), [Indekseeritud](https://greph.inline0.dev/et/docs/indexed/text) ja [Ühilduvus](https://greph.inline0.dev/et/docs/compatibility/rg) käsitlevad konkreetseid töövooge põhjalikult.
