Gå til indhold

Greph

Ren PHP-kodesøgning, strukturel søgning og omskrivningsmotor. grep-, ripgrep- og ast-grep-arbejdsgange i én Composer-pakke.

Terminal
composer require greph/greph

Seneste udgivelse v0.2.3 MIT PHP 8.2+

I praksis

Installer pakken med Composer, og søg og omskriv derefter fra kommandolinjen eller fra PHP.

Søg, match og forhåndsvis en omskrivning

-F udfører en tekstsøgning med fast streng, -p tager et PHP-formet mønster med metavariabler som $CLASS, og -r tilføjer en erstatningsskabelon. --dry-run udskriver de omskrevne filer uden at skrive ændringerne.

Den statiske facade Greph gør de samme handlinger tilgængelige for PHP-kode. Når kommandoerne vendor/bin er installeret som en afhængighed, kræver de version 0.2.3 eller nyere.

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

Ren PHP

Søgning og omskrivning kører i PHP 8.2+ uden grep-, ripgrep- eller ast-grep-binærfil. Bruger udvidelserne json, ctype og tokenizer samt zlib til det cachelagrede AST-lager.

Tekstsøgning

Søgning med faste strenge og regex med hele ord, ufølsomhed over for store og små bogstaver samt tilstande til kontekst, antal og kun filnavne. grep-kompatibelt output.

AST-søgning

Strukturel søgning i PHP-kildekode med $VAR- og $$$VARIADIC-metavariabler, gentagne optagelser og JSON-output. PHP er det eneste understøttede sprog.

AST-omskrivning

Strukturelle omskrivninger med prøvekørsel, interaktiv tilstand og skrivetilstand. Kun matchet kode ændres; kommentarer og layout uden for et match forbliver uændrede.

Indekserede tilstande

Byg et trigramtekstindeks, et AST-faktaindeks eller et cachelagret AST-lager én gang, og genbrug det. I projektets benchmark tog det 1,4 s at bygge AST-faktaindekset, som sænkede new $CLASS() fra 2,9 s til 11 ms; trigramindekset tog 12,3 s.

Wrapperne rg og sg

vendor/bin/rg og vendor/bin/sg accepterer de almindelige søgeflag ripgrep og ast-grep på samme motor. Ikke understøttet: flere linjer, --replace, --type-add og --sort i rg; reglerne YAML og sprog, der ikke er PHP, i sg.

PHP API

Greph::searchText(), searchAst() og rewriteAst() returnerer typede resultatobjekter, så kode i PHP og agenter kan kalde motoren uden en underproces.

Oracle-korpus

39 scenarier sammenligner tekst-, AST- og omskrivningsoutput fra greph med grep, ripgrep og ast-grep. Kør dem med composer test:oracle i en klon af repository'et; CI kører enheds- og integrationspakkerne.

Hvorfor Greph

Ingen native binærfiler

Søgning og omskrivning kører i PHP-processen. Binærfilerne rg, grep og sg bruges kun til de valgfrie benchmark-sammenligninger.

Én motor til alle tilstande

Tekstsøgning, PHP strukturel søgning og omskrivning findes i én Composer-pakke. Wrapperne rg og sg kalder den samme motor som vendor/bin/greph.

Omskrivninger berører kun match

Omskrivningsværktøjet indsætter den gengivne skabelon i de matchede byteområder. Kode uden for et match bevarer indrykning, kommentarer og tomme linjer.

Indeks genbruges uden en dæmon

Indeks ligger på disken og genbruges på tværs af kørsler. En livscyklusprofil afgør, om et forældet indeks efterlades uændret, opdateres under søgningen eller afvises.

Sammenlignet med

Greph samler søgning og omskrivning i PHP. Disse værktøjer løser beslægtede problemer, og nogle ting kan Greph ikke.

Greph sammenlignet med andre værktøjer
ripgrep God tilEt rekursivt regex-søgeværktøj med førsteklasses understøttelse på Windows, macOS og Linux samt binære downloads til hver udgivelse. Det følger gitignore-regler og springer som standard skjulte og binære filer over. Forskel fra GrephGreph installeres med Composer og kører i PHP. I benchmarken for WordPress-korpusset i CI var rg hurtigere på alle kolde tekstforespørgsler, for eksempel 81,62 ms mod 458.82 ms ved bogstavelig søgning. Et varmt Greph-indeks besvarede en antalforespørgsel på 10,90 ms mod 49,61 ms for rg.
ast-grep God tilEn kompileret CLI til strukturel søgning, lint og omskrivning, bygget på tree-sitter. Den har indbygget understøttelse af mange sprog, herunder PHP, og YAML-regelfiler til lintregler og kodeændringer. Forskel fra GrephGreph håndterer kun PHP og læser ingen YAML-regler. Ved en kold scanning var sg hurtigere til array($$$ITEMS) i Grephs CI-benchmark. Grephs varme AST-indeks besvarede new $CLASS() på 10,89 ms mod 4093.61 ms for sg.
Rector God tilOpgraderer og refaktorerer PHP-kode gennem regler og regelsæt med understøttelse af PHP-versioner fra 5.3 til 8.5 og projekter som Symfony, PHPUnit og Doctrine. Forskel fra GrephGreph omskriver ud fra et mønster og en skabelon, du selv skriver. Dokumentationen fraråder værktøjet, når en ændring afhænger af typeinformation, som PHP-Parser ikke kan udlede fra en enkelt fil, eller kræver, at imports tilføjes eller fjernes på tværs af filer.
PHP CS Fixer God tilRetter kode, så den følger kodningsstandarder, med indbyggede regelsæt som PER Coding Style fra PHP-FIG. Forskel fra GrephGreph omformaterer ikke filer. Det ændrer kun den kode, et mønster matcher, og dokumentationen henviser til PHP CS Fixer, hvis du vil have et formatteringsværktøj.

Spørgsmål og svar

Korte svar fra Greph-dokumentationen.

Læs dokumentationen til Greph for reference til CLI, PHP API, de indekserede tilstande og wrapperne rg og sg.