Ugrás a tartalomhoz

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

Shell
# 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 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.