Liigu sisu juurde

Sissejuhatus

Greph on puhas PHP-i otsingu- ja refaktoreerimismootor lähtefailipuude jaoks. See pakub kolme seotud režiimi:

  • Tekstiotsing grep-iga ühilduva väljundi ja ripgrep-laadse kasutusmugavusega.
  • AST-otsing PHP struktuursete mustrite ja metamuutujatega.
  • AST-ümberkirjutus vormingut säilitava struktuurse refaktoreerimisega.

Lisaks on saadaval soojendatud indekseeritud režiimid nii teksti- kui ka AST-töökoormustele, elutsükliteadlikud värskenduspoliitikad, manifestipõhised soojendatud registrikomplektid ning rg / sg ühilduvuskihid tööriistade ja agentide keskkondade jaoks.

Miks Greph olemas on

PHP rakendused ja agendid, mis vajavad kiiret koodiotsingut, käivitavad tavaliselt käsurealt natiivseid tööriistu (grep, ripgrep, ast-grep), kaotades kaasaskantavuse ja lisades juurutamisele hõõrdumist. Struktuurne otsing ja ümberkirjutamine on veelgi keerulisem: tavaliselt tuleb selleks PHP protsessist täielikult väljuda.

Greph kõrvaldab selle puudujäägi. Teie PHP kood saab teha tekstiotsinguid, leida struktuurivasteid ja kirjutada ümber refaktoreeritud koodi, kasutades ainult standardteeki ja nikic/php-parser. Väljund ja väljumiskoodid ühilduvad kanooniliste tööriistadega, nii et olemasolevaid skripte ja agente pole vaja muuta.

Mida see teeb

  • Fikseeritud stringide ja regulaaravaldiste otsing koos terve sõna, tõstutundetuse, konteksti, loenduse ja ainult failide režiimidega
  • Struktuurne PHP AST-otsing koos $VAR, $$$VARIADIC ja korduvate metamuutujatega
  • Vormingut säilitav AST-ümberkirjutus proovikäivituse, interaktiivse ja kirjutamisrežiimiga
  • Soojendatud tekstiindeksid (trigramm + identifikaatorite loendid) korduvate töökoormuste jaoks
  • Soojendatud AST faktiregister ja vahemällu salvestatud AST-otsing korduvate struktuuripäringute jaoks
  • Elutsükliteadlikud soojendatud registrid: static, manual-refresh, opportunistic-refresh, strict-stale-check
  • Mitme registri ja nimega komplektide otsing soojendatud teksti-, AST faktide ja AST vahemälu hoidlates
  • Plaanuri diagnostika käsuga --trace-plan ning registri päritolu märgendamine soojendatud otsingute jaoks
  • Samal mootoril põhinevad ripgrep ja ast-grep CLI ühilduvuskihid
  • pcntl-põhine paralleeltöötajate kogum ühe protsessi varuvariandiga
  • gitignore’i ja .grephignore arvestav failide läbikäija binaarfailide tuvastusega

Nõuded

  • PHP 8.2 või uuem
  • ext-json, ext-ctype ja ext-tokenizer, mis on lubatud peaaegu igas PHP järgus
  • ext-zlib vahemällu salvestatud AST hoidla jaoks (greph-index ast-cache)
  • nikic/php-parser (ainus Composer sõltuvus)

Põhilised teksti- ja AST-funktsioonid töötavad puhtas PHP-is. Valikulised võrdlusuuringud sõltuvad välistest tööriistadest nagu rg, grep ja sg, kuid Greph ise ei vaja neid. Paralleelsed skannimised kasutavad võimaluse korral ext-pcntl ja jätkavad muul juhul sujuvalt tööd ühe protsessiga. Hostide kohta, kus proc_open() ja shell_exec() on keelatud, leiate teavet jaotisest Protsessipiirangutega hostid.

Kiire näide

Täitmisfailid vendor/bin vajavad Greph 0.2.3 või uuemat, kui Greph paigaldatakse projekti sõltuvusena.

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',
);

Alustage jaotisest Alustamine, seejärel tutvuge ülejäänud funktsionaalsusega jaotistes CLI ja API. Jaotised Režiimid, Indekseeritud ja Ühilduvus käsitlevad konkreetseid töövooge põhjalikult.