Pereiti prie turinio

Greph

Grynai PHP kodo paieška, struktūrinė paieška ir perrašymo variklis. grep, ripgrep ir ast-grep darbo eigos viename Composer pakete.

Terminalas
composer require greph/greph

Naujausia versija v0.2.3 MIT PHP 8.2+

Praktinis pritaikymas

Įdiekite paketą naudodami Composer, tada ieškokite ir perrašykite komandinėje eilutėje arba iš PHP.

Ieškokite, raskite atitikmenis ir peržiūrėkite perrašymą

-F atlieka paiešką pagal tikslią teksto eilutę, -p priima PHP tipo šabloną su metakintamaisiais, pavyzdžiui, $CLASS, o -r prideda pakeitimo šabloną. --dry-run išveda perrašytus failus jų neįrašydamas.

Statinis Greph fasadas pateikia tas pačias operacijas PHP kodui. Įdiegtoms kaip priklausomybė, vendor/bin komandoms reikia 0.2.3 arba naujesnės versijos.

Terminalas
# 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

Grynai PHP

Paieška ir perrašymas veikia naudojant PHP 8.2+, be grep, ripgrep ar ast-grep dvejetainės programos. Naudoja json, ctype ir tokenizer plėtinius bei zlib AST talpyklai.

Teksto paieška

Paieška pagal tikslią eilutę ir reguliariąsias išraiškas, palaikanti viso žodžio, raidžių registro ignoravimo, konteksto, skaičiavimo ir tik failų režimus. Išvestis suderinama su grep.

AST paieška

Struktūrinė PHP šaltinio paieška su $VAR ir $$$VARIADIC metakintamaisiais, pasikartojančiais fiksavimais ir JSON išvestimi. Palaikoma tik kalba PHP.

AST perrašymas

Struktūrinis perrašymas bandomuoju, interaktyviuoju ir įrašymo režimais. Keičiama tik atitinkanti kodo dalis; už atitikmens ribų esantys komentarai ir išdėstymas lieka nepakitę.

Indeksuoti režimai

Sukurkite trijų simbolių sekų teksto indeksą, AST faktų indeksą arba AST talpyklą ir naudokite ją pakartotinai. Projekto našumo teste AST faktų indeksas sukurtas per 1.4 s ir sutrumpino new $CLASS() laiką nuo 2.9 s iki 11 ms; trijų simbolių sekų indeksas sukurtas per 12.3 s.

rg ir sg apvalkalai

vendor/bin/rg ir vendor/bin/sg tame pačiame variklyje priima įprastas ripgrep ir ast-grep paieškos vėliavėles. Nepalaikoma: kelių eilučių paieška, --replace, --type-add ir --sort programoje rg; YAML taisyklės ir ne PHP kalbos programoje sg.

PHP API

Greph::searchText(), searchAst() ir rewriteAst() grąžina tipizuotus rezultatų objektus, todėl PHP kodas ir agentai gali iškviesti variklį be antrinio proceso.

Etaloninis korpusas

39 scenarijuose lyginama greph teksto, AST ir perrašymo išvestis su grep, ripgrep ir ast-grep. Paleiskite juos su composer test:oracle saugyklos klone; CI vykdo vienetų ir integracinius rinkinius.

Kodėl Greph

Nėra savųjų dvejetainių failų

Paieška ir perrašymas vykdomi PHP procese. rg, grep ir sg dvejetainiai failai naudojami tik pasirenkamiems našumo palyginimams.

Vienas variklis visiems režimams

Teksto paieška, PHP struktūrinė paieška ir perrašymas veikia viename Composer pakete. rg ir sg apvalkalai naudoja tą patį variklį kaip vendor/bin/greph.

Perrašymas paliečia tik atitikmenis

Perrašymo įrankis įterpia sugeneruotą šabloną į atitinkančius baitų intervalus. Už atitikmens ribų esantis kodas išlaiko įtraukas, komentarus ir tuščias eilutes.

Įkelti indeksai veikia be tarnybos

Indeksai saugomi diske ir naudojami pakartotinių paleidimų metu. Gyvavimo ciklo profilis nustato, ar pasenęs indeksas paliekamas nepakeistas, atnaujinamas paieškos metu, ar atmetamas.

Palyginimas su

Greph paieška ir perrašymas atliekami PHP. Šie įrankiai sprendžia susijusias problemas, o kai kurių dalykų Greph atlikti negali.

Greph palyginimas su kitais įrankiais
ripgrep Stipriosios pusėsRekursinės paieškos reguliariosiomis išraiškomis įrankis, iš karto palaikantis Windows, macOS ir Linux, taip pat siūlantis kiekvieno leidimo dvejetainius atsisiuntimus. Pagal numatytuosius nustatymus paiso gitignore taisyklių ir praleidžia paslėptus bei dvejetainius failus. Skirtumas nuo GrephGreph įdiegiamas naudojant Composer ir veikia PHP aplinkoje. CI našumo teste WordPress korpuse rg buvo greitesnis atliekant kiekvieną šaltą teksto užklausą, pavyzdžiui, pažodinės paieškos trukmė buvo 81.62 ms, palyginti su 458.82 ms. Įkeltas Greph indeksas atsakė į skaičiavimo užklausą per 10.90 ms, o rg užtruko 49.61 ms.
ast-grep Stipriosios pusėsKompiliuotas CLI struktūrinei paieškai, lint patikroms ir perrašymui, sukurtas naudojant tree-sitter. Jis turi įtaisytą daugelio kalbų palaikymą, tarp jų – PHP, ir YAML taisyklių failus lint patikroms bei kodo pakeitimams. Skirtumas nuo GrephGreph apdoroja tik PHP ir nuskaito YAML taisykles. Šalto skenavimo metu sg buvo greitesnis nei array($$$ITEMS) CI našumo teste, atliktame Greph. Įkeltas AST indeksas, kurį turi Greph, į new $CLASS() atsakė per 10.89 ms, o sg užtruko 4093.61 ms.
Rector Stipriosios pusėsAtnaujina ir refaktorizuoja PHP kodą, taikydamas taisykles ir jų rinkinius. Palaikomos PHP versijos nuo 5.3 iki 8.5 ir tokie projektai kaip Symfony, PHPUnit bei Doctrine. Skirtumas nuo GrephGreph perrašo kodą pagal jūsų parašytą šabloną ir šablono pakaitalą. Dokumentacijoje nurodoma jo nenaudoti, kai pakeitimui reikalingos tipo informacijos PHP-Parser negali nustatyti iš vieno failo arba kai reikia pridėti ar pašalinti importus keliuose failuose.
PHP CS Fixer Stipriosios pusėsPataiso kodą pagal kodavimo standartus, naudodamas įtaisytus taisyklių rinkinius, pavyzdžiui, PHP-FIG PER kodavimo stilių. Skirtumas nuo GrephGreph neperformatuoja failų. Jis keičia tik šabloną atitinkantį kodą; jei reikia formatuoklio, dokumentacijoje siūloma naudoti PHP CS Fixer.

Klausimai ir atsakymai

Trumpi atsakymai iš Greph dokumentacijos.

Skaitykite Greph dokumentaciją, kurioje rasite CLI nuorodą, PHP API, indeksuotus režimus ir rg bei sg apvalkalus.