Treci la conținut

Greph

Căutare de cod pură în PHP, căutare structurală și motor de rescriere. Fluxuri de lucru grep, ripgrep și ast-grep într-un singur pachet Composer.

Terminal
composer require greph/greph

Cea mai recentă versiune v0.2.3 MIT PHP 8.2+

În practică

Instalați pachetul cu Composer, apoi căutați și rescrieți din linia de comandă sau din PHP.

Căutați, potriviți și previzualizați o rescriere

-F efectuează o căutare text cu șir fix, -p acceptă un tipar în stil PHP cu metavariabile precum $CLASS, iar -r adaugă un șablon de înlocuire. --dry-run afișează fișierele rescrise fără să le scrie pe disc.

Fațada statică Greph expune aceleași operațiuni pentru codul PHP. Când sunt instalate ca dependență, comenzile vendor/bin necesită versiunea 0.2.3 sau o versiune ulterioară.

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

Pur PHP

Căutarea și rescrierea rulează în PHP 8.2+, fără binarul grep, ripgrep sau ast-grep. Folosește extensiile json, ctype și tokenizer, plus zlib pentru depozitul AST din cache.

Căutare text

Căutare cu șiruri fixe și expresii regulate, cu moduri pentru cuvinte întregi, ignorarea diferențelor dintre majuscule și minuscule, context, numărare și doar fișiere. Rezultate compatibile cu grep.

Căutare AST

Căutare structurală în cod sursă PHP cu $VAR și metavariabile $$$VARIADIC, capturi repetate și rezultate JSON. Este acceptat numai limbajul PHP.

Rescriere AST

Rescrieri structurale cu moduri de simulare, interactiv și scriere. Se modifică numai codul potrivit; comentariile și structura din afara potrivirii rămân neschimbate.

Moduri indexate

Creați o dată un index de text cu trigramă, un index de fapte AST sau un depozit AST în cache și reutilizați-l. În testul de performanță al proiectului, indexul de fapte AST a fost creat în 1.4 s și a redus new $CLASS() de la 2.9 s la 11 ms; indexul cu trigramă a durat 12.3 s.

Wrapper-e rg și sg

vendor/bin/rg și vendor/bin/sg acceptă opțiunile obișnuite de căutare ripgrep și ast-grep în același motor. Nu sunt acoperite: multiline, --replace, --type-add și --sort în rg; regulile YAML și limbajele care nu sunt PHP în sg.

PHP API

Greph::searchText(), searchAst() și rewriteAst() returnează obiecte rezultat tipizate, astfel încât codul PHP și agenții pot apela motorul fără un proces secundar.

Corpus de referință

39 de scenarii compară rezultatele text, AST și rescriere ale greph cu grep, ripgrep și ast-grep. Rulați-le cu composer test:oracle într-o clonă a depozitului; CI rulează suitele de unități și de integrare.

De ce Greph

Fără binare native

Căutarea și rescrierea rulează în procesul PHP. Binar-ele rg, grep și sg sunt folosite doar pentru comparațiile opționale de performanță.

Un singur motor pentru fiecare mod

Căutarea text, căutarea structurală PHP și rescrierea sunt într-un singur pachet Composer. Wrapper-ele rg și sg apelează același motor ca vendor/bin/greph.

Rescrierile ating numai potrivirile

Motorul de rescriere inserează șablonul redat în intervalele de octeți potrivite. Codul din afara unei potriviri își păstrează indentarea, comentariile și liniile goale.

Indexuri încălzite fără serviciu de fundal

Indexurile sunt pe disc și se reutilizează între rulări. Un profil al ciclului de viață decide dacă un index învechit este lăsat neschimbat, reîmprospătat în timpul căutării sau refuzat.

Comparativ cu

Greph păstrează căutarea și rescrierea în PHP. Aceste instrumente rezolvă probleme înrudite și fac unele lucruri pe care Greph nu le face.

Greph în comparație cu alte instrumente
ripgrep Potrivit pentruInstrument de căutare recursivă cu expresii regulate, cu suport de prim rang pentru Windows, macOS și Linux și descărcări binare pentru fiecare versiune. Respectă regulile gitignore și omite implicit fișierele ascunse și binare. Diferența față de GrephGreph se instalează cu Composer și rulează în PHP. În testul său CI de performanță pe corpusul WordPress, rg a fost mai rapid la fiecare interogare text rece, de exemplu 81.62 ms față de 458.82 ms pentru o căutare literală. Un index Greph încălzit a răspuns la o interogare de numărare în 10.90 ms față de 49.61 ms pentru rg.
ast-grep Potrivit pentruUn CLI compilat pentru căutare structurală, lint și rescriere, bazat pe tree-sitter. Are suport integrat pentru multe limbaje, inclusiv PHP, și fișiere de reguli YAML pentru reguli de lint și modificări de cod. Diferența față de GrephGreph gestionează numai PHP și nu citește reguli YAML. La o scanare rece, sg a fost mai rapid pentru array($$$ITEMS) în testul CI de performanță al Greph. Indexul AST încălzit al Greph a răspuns la new $CLASS() în 10.89 ms față de 4093.61 ms pentru sg.
Rector Potrivit pentruActualizează și refactorizează codul PHP prin reguli și seturi de reguli, acoperind versiunile PHP de la 5.3 la 8.5 și proiecte precum Symfony, PHPUnit și Doctrine. Diferența față de GrephGreph rescrie pe baza unui tipar și a unui șablon scris de dumneavoastră. Documentația sa exclude acest instrument când modificarea depinde de informații despre tipuri pe care PHP-Parser nu le poate determina dintr-un singur fișier sau când trebuie adăugate ori eliminate importuri din mai multe fișiere.
PHP CS Fixer Potrivit pentruCorectează codul pentru a respecta standardele de codare, cu seturi de reguli integrate precum stilul de codare PER al PHP-FIG. Diferența față de GrephGreph nu reformatează fișierele. Modifică doar codul potrivit de un tipar, iar documentația indică PHP CS Fixer când aveți nevoie de un formatter.

Întrebări și răspunsuri

Răspunsuri scurte din documentația Greph.

Citiți documentația Greph pentru referința CLI, PHP API, modurile indexate și wrapper-ele rg și sg.