Preskočiť na obsah

Greph

Čisté vyhľadávanie kódu v PHP, štrukturálne vyhľadávanie a engine na prepisovanie. Pracovné postupy grep, ripgrep a ast-grep v jedinom balíku Composer.

Terminál
composer require greph/greph

Najnovšie vydanie v0.2.3 MIT PHP 8.2+

V praxi

Nainštalujte balík pomocou Composer a potom vyhľadávajte a prepisujte z príkazového riadka alebo z PHP.

Vyhľadávanie, párovanie a náhľad prepisu

-F vykonáva textové vyhľadávanie pomocou pevného reťazca, -p prijíma vzor v tvare PHP s metapremennými, ako je $CLASS, a -r pridáva šablónu náhrady. --dry-run vypíše prepísané súbory bez ich zápisu.

Statická fasáda Greph poskytuje rovnaké operácie aj kódu PHP. Po nainštalovaní ako závislosť vyžadujú príkazy vendor/bin verziu 0.2.3 alebo novšiu.

Terminál
# 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

Čisté PHP

Vyhľadávanie a prepisovanie prebieha v PHP 8.2+ bez binárnych súborov grep, ripgrep či ast-grep. Používa rozšírenia json, ctype a tokenizer, ako aj zlib pre cachované úložisko AST.

Textové vyhľadávanie

Vyhľadávanie pevných reťazcov a regulárnych výrazov s režimami pre celé slová, ignorovanie veľkosti písmen, kontext, počty a iba súbory. Výstup kompatibilný s grep.

Vyhľadávanie v AST

Štrukturálne vyhľadávanie v zdrojovom kóde PHP pomocou $VAR a metapremenných $$$VARIADIC, opakovaných zachytení a výstupu JSON. Podporovaným jazykom je iba PHP.

Prepis AST

Štrukturálne prepisovanie s režimami skúšobného spustenia, interaktívneho použitia a zápisu. Mení sa iba nájdený kód; komentáre a rozloženie mimo zhody zostávajú nezmenené.

Režimy s indexovaním

Index textových trigramov, faktov AST alebo cachované úložisko AST vytvoríte raz a potom ich opakovane používate. V projektovom benchmarku trvalo vytvorenie indexu faktov AST 1,4 s a skrátilo čas new $CLASS() z 2,9 s na 11 ms; index trigramov sa vytváral 12,3 s.

Obaly rg a sg

vendor/bin/rg a vendor/bin/sg používajú na rovnakom engine bežné príznaky vyhľadávania ripgrep a ast-grep. Nepodporované: viacriadkové vyhľadávanie, --replace, --type-add a --sort v rg; pravidlá YAML a jazyky iné než PHP v sg.

PHP API

Greph::searchText(), searchAst() a rewriteAst() vracajú typované objekty výsledkov, takže kód PHP a agenti môžu volať engine bez podprocesu.

Korpus Oracle

39 scenárov porovnáva rozdiely vo výstupe greph pre text, AST a prepisovanie s grep, ripgrep a ast-grep. Spustite ich príkazom composer test:oracle v klone repozitára; CI spúšťa jednotkové a integračné testovacie sady.

Prečo Greph

Bez natívnych binárnych súborov

Vyhľadávanie a prepisovanie prebieha v procese PHP. Binárne súbory rg, grep a sg sa používajú iba na voliteľné porovnanie benchmarkov.

Jeden engine pre každý režim

Textové vyhľadávanie, štrukturálne vyhľadávanie PHP a prepisovanie sú súčasťou jedného balíka Composer. Obaly rg a sg volajú rovnaký engine ako vendor/bin/greph.

Prepisovanie mení iba zhody

Nástroj na prepisovanie vloží vykreslenú šablónu do rozsahov bajtov, ktoré zodpovedajú zhode. Kód mimo zhody si zachová odsadenie, komentáre aj prázdne riadky.

Zahriate indexy bez démona

Indexy sú uložené na disku a opakovane sa používajú pri ďalších spusteniach. Profil životného cyklu určuje, či sa zastaraný index ponechá bez zmeny, obnoví počas vyhľadávania alebo odmietne.

V porovnaní s

Greph spája vyhľadávanie a prepisovanie v PHP. Tieto nástroje riešia súvisiace problémy a niektoré úlohy, ktoré Greph nezvláda.

Greph v porovnaní s inými nástrojmi
ripgrep V čom vynikáNástroj na rekurzívne vyhľadávanie regulárnych výrazov s prvotriednou podporou pre Windows, macOS a Linux a binárnymi súbormi na stiahnutie pre každé vydanie. Rešpektuje pravidlá gitignore a predvolene preskakuje skryté a binárne súbory. Rozdiel oproti GrephGreph sa inštaluje pomocou Composer a beží v PHP. V benchmarku CI na korpuse WordPress bolo rg rýchlejšie pri každom studenom textovom vyhľadávaní, napríklad 81,62 ms oproti 458.82 ms pri doslovnom vyhľadávaní. Zahriaty index Greph odpovedal na dopyt na počet za 10,90 ms oproti 49,61 ms pri rg.
ast-grep V čom vynikáKompilovaný CLI na štrukturálne vyhľadávanie, lintovanie a prepisovanie, postavený na tree-sitter. Má vstavanú podporu mnohých jazykov vrátane PHP a súbory pravidiel YAML na lintovacie pravidlá a zmeny kódu. Rozdiel oproti GrephGreph spracúva iba PHP a nečíta žiadne pravidlá YAML. Pri studenom prehľadávaní bolo sg v benchmarku CI nástroja Greph rýchlejšie pri array($$$ITEMS). Zahriaty index AST nástroja Greph odpovedal na dopyt new $CLASS() za 10,89 ms oproti 4093.61 ms pri sg.
Rector V čom vynikáAktualizuje a refaktoruje kód PHP pomocou pravidiel a ich súborov; pokrýva verzie PHP od 5.3 do 8.5 a projekty ako Symfony, PHPUnit a Doctrine. Rozdiel oproti GrephGreph prepisuje kód podľa vzoru a šablóny, ktoré napíšete. Dokumentácia ho neodporúča pri zmenách závislých od informácií o typoch, ktoré PHP-Parser nedokáže určiť z jediného súboru, ani pri potrebe pridávať či odstraňovať importy naprieč súbormi.
PHP CS Fixer V čom vynikáUpravuje kód tak, aby dodržiaval štandardy kódovania, pomocou vstavaných súborov pravidiel, ako je PER Coding Style od PHP-FIG. Rozdiel oproti GrephGreph neformátuje súbory. Mení iba kód zodpovedajúci vzoru a v dokumentácii odkazuje na PHP CS Fixer, ak potrebujete formátovač.

Otázky a odpovede

Stručné odpovede z dokumentácie Greph.

V dokumentácii Greph nájdete referenčné informácie pre CLI, PHP API, indexované režimy a obaly rg a sg.