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-plansegí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ésext-tokenizer, amelyek szinte minden PHP-buildben engedélyezve vannakext-zliba 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 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.
# 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
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 oldallal, majd a felület további részeihez használja a CLI és a API oldalakat. A Módok, az Indexelt és a Kompatibilitás szakasz részletesen bemutat bizonyos munkafolyamatokat.