Liigu sisu juurde

Greph

Ainult PHP koodiotse, struktuuriotsing ja ümberkirjutusmootor. grep-i, ripgrep ja ast-grep töövood ühes Composer paketis.

Terminal
composer require greph/greph

Viimane väljalase v0.2.3 MIT PHP 8.2+

Praktikas

Paigaldage pakett käsuga Composer, seejärel otsige ja kirjutage ümber käsurealt või PHP kaudu.

Otsige, sobitage ja eelvaadake ümberkirjutust

-F teeb fikseeritud stringiga tekstiotsingu, -p kasutab PHP-kujuga mustrit, mille meta­muutujad võivad olla näiteks $CLASS, ja -r lisab asendusmalli. --dry-run kuvab ümberkirjutatud failid neid salvestamata.

Staatiline Greph fassaad pakub PHP koodile samu toiminguid. Sõltuvusena paigaldatuna vajavad käsud vendor/bin versiooni 0.2.3 või uuemat.

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

Ainult PHP

Otsing ja ümberkirjutus käivitatakse PHP 8.2+ sees, ilma grep-i, ripgrep või ast-grep binaarfailita. Kasutab json-, ctype- ja tokenizer-laiendusi ning vahemällu salvestatud AST-hoidla jaoks zlibi.

Tekstiotsing

Fikseeritud stringi ja regulaaravaldistega otsing, terve sõna, tõstutundetuse, konteksti, loenduse ja ainult failide režiimidega. grep-ühilduv väljund.

AST-otsing

Struktuuriotsing PHP lähtekoodis, kasutades $VAR ja $$$VARIADIC meta­muutujaid, korduvaid hõiveid ja JSON väljundit. Toetatud on ainult keel PHP.

AST-i ümberkirjutamine

Struktuursed ümberkirjutused eelvaate-, interaktiivse ja kirjutamisrežiimiga. Muutub ainult sobitatud kood; kommentaarid ja sobituse välised paigutuse üksikasjad jäävad samaks.

Indekseeritud režiimid

Looge trigrammteksti indeks, AST-faktide indeks või vahemällu salvestatud AST-hoidla ning kasutage seda korduvalt. Projekti võrdlustestis kulus AST-faktide indeksi loomiseks 1.4 s ja see vähendas new $CLASS() aega 2.9 sekundilt 11 millisekundile; trigrammiindeksi loomine võttis 12.3 s.

rg- ja sg-ümbrised

vendor/bin/rg ja vendor/bin/sg aktsepteerivad samal mootoril tavapäraseid ripgrep ja ast-grep otsingulippe. Puudu on: rg-s mitmerealine otsing, --replace, --type-add ja --sort; sg-s reeglid YAML ja mitte-PHP keeled.

PHP API

Greph::searchText(), searchAst() ja rewriteAst() tagastavad tüübistatud tulemuseobjekte, nii et PHP kood ja agendid saavad mootorit kasutada alamprotsessita.

Võrdluskorpus

39 stsenaariumi võrdlevad greph-i teksti-, AST- ja ümberkirjutusväljundit grep-i, ripgrep ja ast-grep omadega. Käivitage need hoidla kloonis käsuga composer test:oracle; CI käivitab ühik- ja integratsioonitestid.

Miks Greph

Natiivseid binaarfaile pole vaja

Otsing ja ümberkirjutus käivitatakse PHP protsessis. rg, grep ja sg binaarfaile kasutatakse ainult valikulistes võrdlustestides.

Üks mootor kõigi režiimide jaoks

Tekstiotsing, PHP struktuuriotsing ja ümberkirjutus on ühes Composer paketis. rg- ja sg-ümbrised kasutavad sama mootorit mis vendor/bin/greph.

Ümber kirjutatakse ainult vasted

Ümberkirjutaja põimib renderdatud malli sobitatud baidivahemikesse. Sobituse väline kood säilitab taanded, kommentaarid ja tühjad read.

Soojendatud indeksid ilma taustaprotsessita

Indeksid asuvad kettal ja neid kasutatakse eri käivituskordadel uuesti. Elutsükliprofiil määrab, kas aegunud indeks jäetakse muutmata, värskendatakse otsingu ajal või lükatakse tagasi.

Võrdlus

Greph hoiab otsingu ja ümberkirjutuse PHP sees. Need tööriistad lahendavad sarnaseid probleeme ja saavad mõne asjaga hakkama, millega Greph toime ei tule.

Greph võrrelduna teiste tööriistadega
ripgrep Sobib hästiRekursiivse regulaaravaldisotsingu tööriist, mille esmaklassiline tugi hõlmab Windows, macOS ja Linux ning mille iga väljalaske jaoks on binaarfailide allalaadimised. Järgib gitignore'i reegleid ning jätab peidetud ja binaarfailid vaikimisi vahele. Erinevus võrreldes Greph-gaGreph paigaldatakse käsuga Composer ja see töötab PHP sees. Projekti WordPress korpuse CI-võrdlustestis oli rg iga külma tekstiotsingu puhul kiirem, näiteks literaalse otsingu korral 81.62 ms, võrreldes 458.82 ms-ga. Soojendatud Greph indeks vastas loenduspäringule 10.90 ms-ga, rg-l kulus 49.61 ms.
ast-grep Sobib hästiKompileeritud CLI struktuuriotsinguks, lintimiseks ja ümberkirjutuseks, mis põhineb tree-sitteril. Sisseehitatud tugi hõlmab paljusid keeli, sealhulgas PHP, ning lintimisreeglite ja koodimuudatuste jaoks on YAML reeglifailid. Erinevus võrreldes Greph-gaGreph käsitleb ainult PHP ega loe YAML reegleid. Projekti Greph CI-võrdlustestis oli sg külmal skannimisel array($$$ITEMS) puhul kiirem. Greph soe AST-indeks vastas päringule new $CLASS() 10.89 ms-ga; sg-l kulus 4093.61 ms.
Rector Sobib hästiUuendab ja refaktoreerib reeglite ning reeglikogumite abil PHP koodi, toetades versioone PHP vahemikus 5.3 kuni 8.5 ning projekte nagu Symfony, PHPUnit ja Doctrine. Erinevus võrreldes Greph-gaGreph teeb ümberkirjutusi teie loodud mustri ja malli põhjal. Dokumentatsiooni järgi ei sobi see olukorras, kus muudatus sõltub tüübiteabest, mida PHP-Parser ei suuda ühe faili põhjal tuvastada, või kus importimisi tuleb failide vahel lisada või eemaldada.
PHP CS Fixer Sobib hästiParandab koodi, et see vastaks kodeerimisstandarditele, ning sisaldab sisseehitatud reeglikogumeid, näiteks PHP-FIG-i PER-i stiilijuhendit. Erinevus võrreldes Greph-gaGreph ei vorminda faile ümber. See muudab ainult mustriga sobitatud koodi; vormindaja kasutamisel suunab dokumentatsioon PHP CS Fixer juurde.

Küsimused ja vastused

Lühikesed vastused Greph dokumentatsioonist.

Lugege Greph dokumentatsioonist CLI viite, PHP API, indekseeritud režiimide ning rg- ja sg-ümbriste kohta.