Failų peržiūros priemonė
Kiekvienas Greph režimas (teksto, AST, perrašymo, indeksuoto teksto, indeksuoto AST, podėlyje saugomo AST, rg apvalkalo, sg apvalkalo) pirmiausia pereina failų medį ir sukuria Greph\Walker\FileList. Peržiūros priemonė yra bendra, todėl visur taikomos tos pačios vėliavėlės ir elgsena.
Numatytoji elgsena
Įdiegus peržiūros priemonė pagal numatytuosius nustatymus:
- Rekursyviai pereina visus katalogus, esančius nurodytuose keliuose.
- Kiekviename lygmenyje laikosi
.gitignoreir.grephignoretaisyklių, įskaitant įdėtus perrašymus ir išimtis. - Praleidžia katalogą
.git. - Praleidžia paslėptus failus ir katalogus (viską, kas prasideda
.). - Praleidžia dvejetainius failus (aptinkami pagal nulinius baitus pirmuosiuose 512 failo baituose).
- Praleidžia didesnius nei 10 MiB failus.
- Neseka simbolinių nuorodų.
Perrašymo vėliavėlės
| Vėliavėlė | Poveikis |
|---|---|
--no-ignore |
Nebesilaikoma .gitignore ir .grephignore taisyklių |
--hidden |
Įtraukiami paslėpti failai ir katalogai |
--type NAME |
Įtraukiami tik nurodytą tipo slapyvardį atitinkantys failai |
--type-not NAME |
Neįtraukiami nurodytą tipo slapyvardį atitinkantys failai |
--glob GLOB |
Įtraukiami tik GLOB atitinkantys failai. Galima nurodyti kelis kartus. |
Tos pačios parinktys programiniam naudojimui pasiekiamos per Greph\Walker\WalkOptions.
use Greph\Greph;
use Greph\Walker\FileTypeFilter;
use Greph\Walker\WalkOptions;
$files = Greph::walk('src', new WalkOptions(
respectIgnore: false,
includeHidden: true,
fileTypeFilter: new FileTypeFilter(['php']),
globPatterns: ['src/**/*.php'],
));
Failų tipų slapyvardžiai
Greph turi nedidelį pavadintų failų tipų rinkinį. Kiekvienas slapyvardis nurodo plėtinių sąrašą:
| Slapyvardis | Plėtiniai |
|---|---|
css |
css, sass, scss |
html |
htm, html, phtml |
js |
cjs, js, mjs |
json |
json |
md |
markdown, md |
php |
inc, php, php3, php4, php5, php7, php8, phpt, phtml |
txt |
txt |
ts |
ts, tsx |
xml |
xml |
yaml |
yaml, yml |
Visas sąrašas pateiktas Greph\Walker\FileTypeFilter::TYPE_MAP.
.gitignore semantika
Greph gitignore atitikimą įgyvendina naudodama tik PHP. Semantika atitinka git check-ignore:
- Šablonai vertinami katalogo, kuriame jie yra, atžvilgiu.
- Įdėtuose kataloguose esantys
.gitignorefailai pakeičia aukštesnio lygio taisykles. - Išimtis (
!pattern) vėl įtraukia anksčiau neįtrauktą kelią. - Pabaigoje esantis
/apriboja šabloną katalogais. - Pradžioje esantis
/susieja šabloną su.gitignorekatalogu. **atitinka bet kokį kelių segmentų skaičių.
.grephignore naudoja tą pačią sintaksę ir yra taikomas ant .gitignore taisyklių. Čia galima nurodyti konkrečiam įrankiui skirtas išimtis, kurių nenorite įtraukti į versijų kontrolę.
Įgyvendinimas yra Greph\Walker\GitignoreFilter.
Dvejetainių failų aptikimas
Peržiūros priemonė kiekvieno failo pirmuosiuose 512 baituose ieško nulinių baitų. Jei jų randa, failas laikomas dvejetainiu ir praleidžiamas. Taip aptinkamas įprastas atvejis, kai indekso kataloge saugykloje yra vaizdų, archyvų ar kompiliuotų artefaktų.
Norėdami vis tiek ieškoti dvejetainiuose failuose, atitinkamame Options objekte nustatykite skipBinaryFiles: false. CLI šiuo metu tokios vėliavėlės neturi; naudokite fasadą.
Simbolinės nuorodos
Pagal numatytuosius nustatymus simbolinėmis nuorodomis nesekama. Norėdami jas sekti, nustatykite followSymlinks: true arba rg apvalkalui perduokite -L / --follow. Peržiūros priemonė seka aplankytus katalogus, todėl simbolinių nuorodų ciklai nesukelia begalinės rekursijos.
Didžiausias failo dydis
Praleidžiami didesni nei maxFileSizeBytes failai (numatytoji reikšmė – 10 MiB). Taip išvengiama, kad į atmintį netyčia būtų įkeltas 1 GB žurnalo failas. Jei reikia apdoroti didesnius failus, pakeiskite ribą Options objekte.
Kodėl reikalinga pasirinktinė peržiūros priemonė
Greph galėtų naudoti glob() arba RecursiveDirectoryIterator, tačiau nė vienas iš jų neįgyvendina gitignore semantikos, neatpažįsta .grephignore ir sklandžiai neveikia su darbininkų telkiniu. Be to, turint vieną bendrą peržiūros priemonę visiems režimams, visur taikomos visiškai vienodos filtravimo taisyklės. Tai labai svarbu taikant etalonais pagrįstą testavimo strategiją: vienintelis būdas palyginti su grep, ripgrep ir ast-grep – pereiti tuos pačius failus, kuriuos peržiūri šie įrankiai.