
# Bevezetés
A Greph egy tisztán PHP nyelven működő kereső- és átalakítómotor forrásfákhoz. Három kapcsolódó módot kínál:

- **Szöveges keresés** grep-kompatibilis kimenettel és a ripgrep eszközre jellemző kényelmes használattal.
- **AST-keresés** strukturális PHP mintákkal és met változókkal.
- **AST-átírás** formázást megőrző strukturális átalakításhoz.

Szöveges és AST-feladatokhoz bemelegített indexelt módokat, életciklus-tudatos frissítési szabályokat, jegyzék által kezelt bemelegített indexkészleteket, valamint ugyanarra a motorra épülő `rg` / `sg` kompatibilitási burkolókat is tartalmaz eszköz- és ügynökkörnyezetekhez.

## Miért jött létre a Greph

A gyors kódkeresést igénylő PHP alkalmazások és ügynökök rendszerint natív eszközöket indítanak a parancssorból (`grep`, `ripgrep`, `ast-grep`), így feladják a hordozhatóságot, és bonyolultabbá teszik a telepítést. A strukturális keresés és átírás még nehezebb: ehhez általában teljesen ki kell lépni a PHP folyamatból.

A Greph megszünteti ezt a hiányosságot. A PHP kódja kizárólag a standard könyvtár és a `nikic/php-parser` használatával végezhet szöveges kereséseket, strukturális egyezéskereséseket és átírásokat. A kimenet és a kilépési kódok kompatibilisek a kanonikus eszközökkel, ezért a meglévő parancsfájlokon és ügynökökön nem kell változtatni.

## Mit tud

- Szöveges keresés rögzített karakterláncokkal és reguláris kifejezésekkel; teljes szavas, kis- és nagybetűktől független, környezetet megjelenítő, találatszámot kiíró és csak fájlokat megjelenítő módokkal
- Strukturális PHP AST-keresés `$VAR`, `$$$VARIADIC` és ismétlődő met változók használatával
- Formázást megőrző AST-átírás próbafuttatási, interaktív és írási móddal
- Bemelegített szöveges indexek (trigramok és azonosító-előfordulások) ismétlődő feladatokhoz
- Bemelegített AST-tényindex és gyorsítótárazott AST-keresés ismétlődő strukturális lekérdezésekhez
- Életciklus-tudatos bemelegített indexek: `static`, `manual-refresh`, `opportunistic-refresh`, `strict-stale-check`
- Keresés több indexben és elnevezett készletekben a bemelegített szöveges, AST-tény- és AST-gyorsítótár-tárolók között
- Tervezői diagnosztika a `--trace-plan` segítségével, valamint az index eredetét jelölő címke bemelegített kereséseknél
- ripgrep és ast-grep CLI kompatibilitási burkolók, amelyek ugyanazt a motort használják
- pcntl-alapú párhuzamos feldolgozókészlet, egyetlen folyamatra való visszaállással
- gitignore- és `.grephignore`-tudatos fájlbejárás bináris fájlok felismerésével

## Követelmények

- PHP 8.2 vagy újabb
- `ext-json`, `ext-ctype` és `ext-tokenizer`, amelyek szinte minden PHP-buildben engedélyezve vannak
- `ext-zlib` a gyorsítótárazott AST-tárolóhoz (`greph-index ast-cache`)
- `nikic/php-parser` (az egyetlen Composer-függőség)

Az alapvető szöveges és AST-funkciók tisztán PHP nyelven működnek. Az opcionális összehasonlító mérések külső eszközöktől, például a `rg`, a `grep` és a `sg` eszköztől függenek, de magának a Greph-nek nincs szüksége rájuk a működéshez. A párhuzamos vizsgálatok használják a `ext-pcntl`-t, ha az elérhető, ellenkező esetben zökkenőmentesen egyetlen folyamatban futnak. A `proc_open()` és a `shell_exec()` használatát tiltó hosztokról a [Folyamatkorlátozott hosztok](https://greph.inline0.dev/hu/docs/advanced/process-restricted-hosts) oldalon olvashat.

## Gyors példa

A `vendor/bin` végrehajtható fájljainak futtatásához Greph projektfüggőségként való telepítése esetén Greph 0.2.3 vagy újabb verzió szükséges.

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

Kezdje az [Első lépések](https://greph.inline0.dev/hu/docs/getting-started) oldallal, majd a felület további részeihez használja a [CLI](https://greph.inline0.dev/hu/docs/cli) és a [API](https://greph.inline0.dev/hu/docs/api) oldalakat. A [Módok](https://greph.inline0.dev/hu/docs/modes/text), az [Indexelt](https://greph.inline0.dev/hu/docs/indexed/text) és a [Kompatibilitás](https://greph.inline0.dev/hu/docs/compatibility/rg) szakasz részletesen bemutat bizonyos munkafolyamatokat.
