Sprehajalnik datotek
Vsak način Greph (besedilo, AST, prepisovanje, indeksirano besedilo, indeksirani AST, predpomnjeni AST, ovojnik rg, ovojnik sg) se začne s pregledom drevesa datotek in ustvarjanjem Greph\Walker\FileList. Sprehajalnik je skupen, zato povsod veljajo iste zastavice in vedenje.
Privzeto delovanje
S privzetimi nastavitvami sprehajalnik:
- Rekurzivno pregleda vse imenike pod zahtevanimi potmi.
- Na vseh ravneh upošteva pravila
.gitignorein.grephignore, vključno z gnezdenimi preglasitvami in izjemami. - Preskoči imenik
.git. - Preskoči skrite datoteke in imenike (vse, kar se začne z
.). - Preskoči binarne datoteke (zazna jih po ničelnih bajtih v prvih 512 bajtih datoteke).
- Preskoči datoteke, večje od 10 MiB.
- Ne sledi simbolnim povezavam.
Zastavice za preglasitev
| Zastavica | Učinek |
|---|---|
--no-ignore |
Ne upošteva več .gitignore in .grephignore |
--hidden |
Vključi skrite datoteke in imenike |
--type NAME |
Vključi samo datoteke, ki ustrezajo imenovanemu vzdevku vrste |
--type-not NAME |
Izključi datoteke, ki ustrezajo imenovanemu vzdevku vrste |
--glob GLOB |
Vključi samo datoteke, katerih poti ustrezajo vzorcu GLOB. Zastavico je mogoče ponoviti. |
Za programsko uporabo so iste možnosti na voljo prek 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'],
));
Vzdevki vrst datotek
Greph vključuje majhen nabor imenovanih vrst datotek. Vsak vzdevek se razširi v seznam končnic:
| Vzdevek | Končnice |
|---|---|
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 |
Celoten seznam je v Greph\Walker\FileTypeFilter::TYPE_MAP.
Semantika .gitignore
Greph izvaja ujemanje po pravilih gitignore v čistem PHP. Semantika je usklajena s git check-ignore:
- Vzorci se vrednotijo glede na imenik, v katerem so zapisani.
- Gnezdene datoteke
.gitignorepreglasijo pravila nadrejenih imenikov. - Negacija (
!pattern) znova vključi prej izključeno pot. - Končni
/omeji vzorec na imenike. - Začetni
/zasidra vzorec na imenik datoteke.gitignore. **se ujema s poljubnim številom segmentov poti.
.grephignore uporablja isto sintakso in je nadgrajen na .gitignore. To je pravo mesto za izključitve, specifične za orodje, ki jih ne želite vključiti v nadzor različic.
Implementacija je v Greph\Walker\GitignoreFilter.
Zaznavanje binarnih datotek
Sprehajalnik preveri prvih 512 bajtov vsake datoteke za ničelne bajte. Če jih najde, datoteko obravnava kot binarno in jo preskoči. Tako zazna pogost primer, ko so v imeniku, vključenem v indeksiranje, slikovne, arhivske ali prevedene datoteke.
Če želite vseeno iskati po binarnih datotekah, nastavite skipBinaryFiles: false na ustreznem objektu Options. CLI trenutno ne ponuja zastavice za to; uporabite fasado.
Simbolne povezave
Sprehajalnik privzeto ne sledi simbolnim povezavam. Če jim želite slediti, nastavite followSymlinks: true (ali posredujte -L / --follow ovoju rg). Sprehajalnik beleži že obiskane imenike, zato zanke simbolnih povezav ne povzročijo neskončne rekurzije.
Največja velikost datoteke
Datoteke, večje od maxFileSizeBytes (privzeto 10 MiB), so preskočene. Tako pregled ne naloži po pomoti 1 GB velike dnevniške datoteke v pomnilnik. Omejitev lahko preglasite v objektu Options, kadar morate obdelati večje vhode.
Zakaj lastni sprehajalnik
Greph bi se lahko zanašal na glob() ali RecursiveDirectoryIterator, vendar nobeden ne izvaja semantike gitignore, nobeden ne razume .grephignore in nobeden se ne poveže gladko s skupino delavcev. Enkratna izdelava sprehajalnika in njegova souporaba med načini pomenita tudi, da vsak način uporablja povsem enaka pravila filtriranja, kar je ključno za strategijo testiranja na podlagi referenčnih rezultatov: primerjava z grep, ripgrep in ast-grep je mogoča samo, če pregledamo isti nabor datotek kot ta orodja.