Pāriet uz saturu

Greph

Tīrs PHP koda meklēšanas, strukturālās meklēšanas un pārrakstīšanas dzinējs. grep, ripgrep un ast-grep darbplūsmas vienā Composer pakotnē.

Terminālis
composer require greph/greph

Jaunākais laidiens v0.2.3 MIT PHP 8.2+

Praksē

Instalējiet pakotni ar Composer, pēc tam meklējiet un pārrakstiet komandrindā vai no PHP.

Meklējiet, atrodiet atbilstības un priekšskatiet pārrakstīšanu

-F veic precīzu teksta meklēšanu, -p pieņem PHP formas rakstu ar metavariabļiem, piemēram, $CLASS, bet -r pievieno aizstāšanas veidni. --dry-run izvada pārrakstītos failus, tos nerakstot diskā.

Statiskā Greph fasāde nodrošina tās pašas darbības arī PHP kodam. Instalējot kā atkarību, vendor/bin komandām nepieciešama versija 0.2.3 vai jaunāka.

Terminālis
# 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

Tīrs PHP

Meklēšana un pārrakstīšana darbojas PHP 8.2+, bez grep, ripgrep vai ast-grep binārajiem failiem. Izmanto json, ctype un tokenizer paplašinājumus, kā arī zlib kešotai AST krātuvei.

Teksta meklēšana

Precīzu virkņu un regulāro izteiksmju meklēšana ar pilna vārda, reģistrjutības ignorēšanas, konteksta, skaita un tikai failu režīmiem. grep saderīga izvade.

AST meklēšana

Strukturālā meklēšana PHP pirmkodā, izmantojot $VAR un $$$VARIADIC metavariabļus, atkārtotus tvērumus un JSON izvadi. Atbalstīta ir tikai valoda PHP.

AST pārveide

Strukturāla pārrakstīšana ar izmēģinājuma, interaktīvo un rakstīšanas režīmu. Mainās tikai atbilstošais kods; komentāri un izkārtojums ārpus atbilstības paliek nemainīti.

Indeksētie režīmi

Vienreiz izveidojiet triagrammu teksta indeksu, AST faktu indeksu vai kešotu AST krātuvi un izmantojiet to atkārtoti. Projekta veiktspējas testā AST faktu indeksa izveide aizņēma 1.4 s un samazināja new $CLASS() no 2.9 s līdz 11 ms; triagrammu indeksa izveide aizņēma 12.3 s.

rg un sg aplauzēji

vendor/bin/rg un vendor/bin/sg vienā dzinējā pieņem biežāk lietotos ripgrep un ast-grep meklēšanas karodziņus. Nav atbalstīts: vairākas rindas, --replace, --type-add un --sort rīkā rg; YAML noteikumi un valodas, kas nav PHP, rīkā sg.

PHP API

Greph::searchText(), searchAst() un rewriteAst() atgriež tipizētus rezultātu objektus, tāpēc PHP kods un aģenti var izsaukt dzinēju bez apakšprocesa.

Oracle korpuss

39 scenārijos greph teksta, AST un pārrakstīšanas izvade tiek salīdzināta ar grep, ripgrep un ast-grep. Palaidiet tos ar composer test:oracle repozitorija klonā; CI palaiž vienību un integrācijas testu kopas.

Kāpēc Greph

Nav vietējo bināro failu

Meklēšana un pārrakstīšana darbojas PHP procesā. rg, grep un sg binārie faili tiek izmantoti tikai izvēles veiktspējas salīdzinājumiem.

Viens dzinējs visiem režīmiem

Teksta meklēšana, PHP strukturālā meklēšana un pārrakstīšana ietilpst vienā Composer pakotnē. rg un sg aplauzēji izsauc to pašu dzinēju, ko izmanto vendor/bin/greph.

Pārrakstīšana skar tikai atbilstības

Pārrakstītājs ievieto attēloto veidni atbilstošajos baitu diapazonos. Kods ārpus atbilstības saglabā atkāpes, komentārus un tukšās rindas.

Iesildīti indeksi bez dēmona

Indeksi atrodas diskā un tiek izmantoti atkārtoti. Dzīves cikla profils nosaka, vai novecojis indekss tiek atstāts nemainīts, atjaunināts meklēšanas laikā vai noraidīts.

Salīdzinājums ar

Greph apvieno meklēšanu un pārrakstīšanu PHP. Šie rīki risina saistītas problēmas, un dažas lietas Greph nepiedāvā.

Greph salīdzinājumā ar citiem rīkiem
ripgrep PiemērotsRekursīvas regulāro izteiksmju meklēšanas rīks ar pirmšķirīgu atbalstu platformās Windows, macOS un Linux, kā arī binārām lejupielādēm katram laidienam. Tas ievēro gitignore noteikumus un pēc noklusējuma izlaiž slēptos un bināros failus. Atšķirība no GrephGreph instalē ar Composer un darbojas PHP. CI veiktspējas testā ar WordPress korpusu rg bija ātrāks katrā aukstajā teksta vaicājumā, piemēram, burtisku virkņu meklēšana aizņēma 81.62 ms pret 458.82 ms. Iesildīts Greph indekss atbildēja uz skaita vaicājumu 10.90 ms pret rg 49.61 ms.
ast-grep PiemērotsKompilēts CLI strukturālajai meklēšanai, lint pārbaudēm un pārrakstīšanai, veidots uz tree-sitter. Tam ir iebūvēts atbalsts daudzām valodām, tostarp PHP, kā arī YAML noteikumu faili lint pārbaudēm un koda izmaiņām. Atšķirība no GrephGreph apstrādā tikai PHP un nelasa YAML noteikumus. Aukstajā skenēšanā array($$$ITEMS) bija ātrāks Greph CI veiktspējas testā. Greph iesildītais AST indekss atbildēja uz new $CLASS() vaicājumu 10.89 ms pret 4093.61 ms sg.
Rector PiemērotsAtjaunina un refaktorē PHP kodu, izmantojot noteikumus un noteikumu kopas, aptverot PHP versijas no 5.3 līdz 8.5 un projektus, piemēram, Symfony, PHPUnit un Doctrine. Atšķirība no GrephGreph pārraksta kodu, izmantojot jūsu veidotu rakstu un veidni. Dokumentācijā norādīts, ka to nevajadzētu izmantot, ja izmaiņas ir atkarīgas no tipa informācijas, ko PHP-Parser nevar noteikt, analizējot vienu failu, vai ja jāveic importu pievienošana vai noņemšana starp failiem.
PHP CS Fixer PiemērotsPielāgo kodu kodēšanas standartiem, izmantojot iebūvētas noteikumu kopas, piemēram, PHP-FIG's PER kodēšanas stilu. Atšķirība no GrephGreph nepārformatē failus. Tas maina tikai raksta atrasto kodu, un dokumentācijā norādīts izmantot PHP CS Fixer, ja nepieciešams formatētājs.

Jautājumi un atbildes

Īsas atbildes no Greph dokumentācijas.

Lasiet Greph dokumentāciju, lai uzzinātu par CLI atsauci, PHP API, indeksētajiem režīmiem un rg un sg aplauzējiem.