Treci la conținut

Introducere

Greph este un motor pur de căutare și refactorizare PHP pentru arbori de cod sursă. Oferă trei moduri conexe:

  • Căutare text cu ieșire compatibilă cu grep și experiență de utilizare în stilul ripgrep.
  • Căutare AST cu tipare structurale PHP și metavariabile.
  • Rescriere AST cu refactorizare structurală care păstrează formatarea.

Include și moduri indexate încălzite pentru volume de lucru atât cu text, cât și cu AST, politici de reîmprospătare adaptate ciclului de viață, seturi de indexuri încălzite susținute de manifest și wrapperi de compatibilitate rg / sg pentru medii cu instrumente și agenți.

De ce există Greph

Aplicațiile și agenții PHP care au nevoie de căutare rapidă în cod apelează de obicei la instrumente native (grep, ripgrep, ast-grep), renunțând la portabilitate și complicând implementarea. Căutarea și rescrierea structurală sunt și mai dificile: de obicei, presupun părăsirea completă a procesului PHP.

Greph elimină acest decalaj. Codul dumneavoastră PHP poate executa căutări text, potriviri structurale și rescrieri de refactorizare folosind doar biblioteca standard și nikic/php-parser. Ieșirea și codurile de ieșire sunt compatibile cu instrumentele canonice, așa că scripturile și agenții existenți nu trebuie modificați.

Ce face

  • Căutare text cu șir fix și expresii regulate, cu moduri pentru cuvinte întregi, potrivire fără diferențiere între majuscule și minuscule, context, numărători și doar fișiere
  • Căutare structurală AST PHP cu $VAR, $$$VARIADIC și metavariabile repetate
  • Rescriere AST cu formatarea păstrată, în modurile simulare, interactiv și scriere
  • Indexuri de text încălzite (trigrame + liste de identificatori) pentru volume de lucru repetate
  • Index de fapte AST încălzit și căutare AST memorată în cache pentru interogări structurale repetate
  • Indexuri încălzite adaptate ciclului de viață: static, manual-refresh, opportunistic-refresh, strict-stale-check
  • Căutare în mai multe indexuri și seturi cu nume, în stocările încălzite pentru text, fapte AST și cache AST
  • Diagnosticarea planificatorului cu --trace-plan și etichetarea originii indexului în căutările încălzite
  • Wrapperi de compatibilitate ripgrep și ast-grep CLI susținuți de același motor
  • Grup de procese de lucru paralele bazat pe pcntl, cu rezervă pentru un singur proces
  • Parcurgerea fișierelor care respectă gitignore și .grephignore, cu detectarea fișierelor binare

Cerințe

  • PHP 8.2 sau ulterior
  • ext-json, ext-ctype și ext-tokenizer, activate în aproape toate versiunile PHP
  • ext-zlib pentru stocarea AST memorată în cache (greph-index ast-cache)
  • nikic/php-parser (singura dependență Composer)

Funcțiile de bază pentru text și AST rulează în PHP pur. Comparațiile opționale de performanță depind de instrumente externe precum rg, grep și sg, dar Greph nu are nevoie de acestea pentru a funcționa. Scanările paralele folosesc ext-pcntl când este disponibil și revin fără probleme la execuția cu un singur proces în caz contrar. Gazdele care interzic proc_open() și shell_exec() sunt prezentate în Gazde cu procese restricționate.

Exemplu rapid

Executabilele vendor/bin au nevoie de Greph 0.2.3 sau ulterior când Greph este instalat ca dependență a proiectului dumneavoastră.

Shell
# 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
PHP
use Greph\Greph;
use Greph\Ast\AstSearchOptions;
use Greph\Text\TextSearchOptions;

$matches = Greph::searchText(
    'function',
    'src',
    new TextSearchOptions(fixedString: true),
);

$asts = Greph::searchAst(
    'new $CLASS()',
    'src',
    new AstSearchOptions(),
);

$rewrites = Greph::rewriteAst(
    'array($$$ITEMS)',
    '[$$$ITEMS]',
    'src',
);

Începeți cu Introducere, apoi folosiți CLI și API pentru restul funcționalităților. Secțiunile Moduri, Indexat și Compatibilitate prezintă în detaliu fluxuri de lucru specifice.