Ievads
Greph ir tīrs PHP meklēšanas un pārstrukturēšanas dzinis avota koda kokiem. Tas piedāvā trīs saistītus režīmus:
- Teksta meklēšana ar grep saderīgu izvadi un ripgrep raksturīgo ērto lietošanu.
- AST meklēšana ar PHP strukturālajiem paraugiem un metamainīgajiem.
- AST pārrakstīšana ar formatējumu saglabājošu strukturālo pārveidošanu.
Komplektā ir arī uzsildīti indeksētie režīmi teksta un AST slodzēm, dzīves ciklam pielāgotas atsvaidzināšanas politikas, uz manifestiem balstītas uzsildīto indeksu kopas un ar rg / sg saderīgi wrapperi rīku un aģentu vidēm.
Kāpēc tika izveidots Greph
Lietotnes un aģenti, kam nepieciešama ātra koda meklēšana, parasti izsauc vietējos rīkus (grep, ripgrep, ast-grep), atsakoties no pārnesamības un apgrūtinot izvietošanu. Strukturālā meklēšana un pārrakstīšana ir vēl sarežģītāka: parasti tas nozīmē pilnībā pamest PHP procesu.PHP
Greph novērš šo trūkumu. Jūsu PHP kodā var veikt teksta meklēšanu, strukturālu atbilstību meklēšanu un pārstrukturēšanu, izmantojot tikai standarta bibliotēku un nikic/php-parser. Izvade un izejas kodi ir saderīgi ar kanoniskajiem rīkiem, tāpēc esošie skripti un aģenti nav jāmaina.
Ko tas dara
- Teksta meklēšana pēc fiksētām virknēm un regulārajām izteiksmēm ar pilna vārda, reģistrnejutīgas atbilstības, konteksta, skaita un tikai failu režīmiem
- Strukturāla PHP AST meklēšana ar
$VAR,$$$VARIADICun atkārtotiem metamainīgajiem - Formatējumu saglabājoša AST pārrakstīšana ar izmēģinājuma, interaktīvo un rakstīšanas režīmu
- Uzsildīti teksta indeksi (trigrammas un identifikatoru ieraksti) atkārtotām slodzēm
- Uzsildīts AST faktu indekss un kešota AST meklēšana atkārtotiem strukturāliem vaicājumiem
- Dzīves ciklam pielāgoti uzsildītie indeksi:
static,manual-refresh,opportunistic-refresh,strict-stale-check - Vairāku indeksu un nosaukto kopu meklēšana uzsildītos teksta, AST faktu un AST kešatmiņas krātuvēs
- Plānotāja diagnostika ar
--trace-planun indeksu izcelsmes marķējumu uzsildītajai meklēšanai - Ar to pašu dzini darbināti ripgrep un ast-grep CLI saderības wrapperi
- Uz pcntl balstīts paralēlo darbplūsmu kopums ar viena procesa rezerves režīmu
- Failu pārlūks, kas ievēro gitignore un
.grephignore, un atpazīst bināros failus
Kas tam nepieciešams
- PHP 8.2 vai jaunāka versija
ext-json,ext-ctypeunext-tokenizer, kas ir iespējoti gandrīz katrā PHP būvējumāext-zlibkešotajai AST krātuvei (greph-index ast-cache)nikic/php-parser(vienīgā Composer atkarība)
Teksta un AST pamatfunkcijas darbojas tīrā PHP vidē. Pēc izvēles pieejamā salīdzināšana etalonpārbaudēs ir atkarīga no ārējiem rīkiem, piemēram, rg, grep un sg, taču paša Greph darbībai tie nav vajadzīgi. Paralēlās skenēšanas izmanto ext-pcntl, ja tas ir pieejams, un citādi bez problēmām pārslēdzas uz viena procesa izpildi. Sadaļā Procesiem ierobežotas vides aplūkoti resursdatori, kas aizliedz proc_open() un shell_exec().
Īss piemērs
vendor/bin izpildāmajām programmām nepieciešama Greph 0.2.3 vai jaunāka versija, ja Greph ir instalēts kā jūsu projekta atkarība.
# 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
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',
);
Sāciet ar sadaļu Darba sākšana, pēc tam pārējo funkcionalitāti skatiet sadaļās CLI un API. Sadaļās Režīmi, Indeksēšana un Saderība detalizēti aplūkotas konkrētas darbplūsmas.