Fájlbejáró
Minden Greph mód (szöveg, AST, átírás, indexelt szöveg, indexelt AST, gyorsítótárazott AST, rg-burkoló, sg-burkoló) a fájlfa bejárásával és egy Greph\Walker\FileList létrehozásával kezdődik. A bejáró közös, ezért mindenhol ugyanazok a jelzők és viselkedések érvényesek.
Alapértelmezett működés
Alapértelmezés szerint a bejáró:
- Rekurzívan bejárja a megadott útvonalak alatti összes könyvtárat.
- Minden szinten figyelembe veszi a
.gitignoreés a.grephignoreszabályait, a beágyazott felülírásokat és tagadásokat is. - Kihagyja a
.gitkönyvtárat. - Kihagyja a rejtett fájlokat és könyvtárakat (amelyek neve
.karakterrel kezdődik). - Kihagyja a bináris fájlokat (felismerésük a fájl első 512 bájtjában található nullbájtok alapján történik).
- Kihagyja a 10 MiB-nál nagyobb fájlokat.
- Nem követi a szimbolikus hivatkozásokat.
Felülbíráló jelzők
| Jelző | Hatás |
|---|---|
--no-ignore |
Figyelmen kívül hagyja a .gitignore és .grephignore szabályait |
--hidden |
Beveszi a rejtett fájlokat és könyvtárakat |
--type NAME |
Csak a megadott típusaliasnak megfelelő fájlokat veszi be |
--type-not NAME |
Kihagyja a megadott típusaliasnak megfelelő fájlokat |
--glob GLOB |
Csak az útvonaluk alapján a GLOB mintára illeszkedő fájlokat veszi be. Ismételhető. |
Programozott használat esetén ugyanezek a beállítások a Greph\Walker\WalkOptions útján érhetők el.
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'],
));
Fájltípus-aliasok
A Greph néhány névvel ellátott fájltípust tartalmaz. Minden alias kiterjesztések listájára oldódik fel:
| Alias | Kiterjesztések |
|---|---|
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 |
A teljes lista itt található: Greph\Walker\FileTypeFilter::TYPE_MAP.
A .gitignore működése
A Greph tiszta PHP megvalósítással végzi a gitignore-egyeztetést. A működése összhangban van a git check-ignore működésével:
- A minták értelmezése a könyvtárhoz viszonyítva történik, amelyben szerepelnek.
- A beágyazott
.gitignorefájlok felülírják a szülő könyvtár szabályait. - A tagadás (
!pattern) újra bevon egy korábban kihagyott útvonalat. - A záró
/a mintát könyvtárakra korlátozza. - A kezdő
/a minta érvényét a.gitignorekönyvtárára korlátozza. - A
**tetszőleges számú útvonalszegmensre illeszkedik.
A .grephignore ugyanazt a szintaxist használja, és a .gitignore fölé épül. Itt adhatja meg azokat az eszközspecifikus kizárásokat, amelyeket nem szeretne verziókezelésben tárolni.
A megvalósítás helye: Greph\Walker\GitignoreFilter.
Bináris fájlok felismerése
A bejáró minden fájl első 512 bájtját ellenőrzi nullbájtok után kutatva. Ha talál ilyet, a fájlt binárisnak tekinti és kihagyja. Ez felismeri azt a gyakori esetet, amikor egy tárház indexelt könyvtára képeket, archívumokat vagy lefordított fájlokat tartalmaz.
Ha mégis keresni szeretne bináris fájlokban, állítsa be a skipBinaryFiles: false értékét a megfelelő Options objektumban. A CLI jelenleg nem tesz elérhetővé ehhez jelzőt; használja a homlokzatot.
Szimbolikus hivatkozások
Alapértelmezés szerint a program nem követi a szimbolikus hivatkozásokat. Követésükhöz állítsa be a followSymlinks: true értékét (vagy adja át a -L / --follow értéket a rg burkolónak). A bejáró nyilvántartja a már meglátogatott könyvtárakat, így a szimbolikus hivatkozások hurkai nem okoznak végtelen rekurziót.
Maximális fájlméret
A maxFileSizeBytes méretnél nagyobb fájlokat a program kihagyja (az alapértelmezés 10 MiB). Ezzel megelőzhető, hogy egy vizsgálat véletlenül egy 1 GB-os naplófájlt töltsön a memóriába. Ha nagyobb bemeneteket is fel kell dolgoznia, írja felül a korlátot a Options objektumban.
Miért egyedi a bejáró
A Greph használhatná a glob() vagy a RecursiveDirectoryIterator eszközt, de egyik sem valósítja meg a gitignore működését, egyik sem ismeri a .grephignore formátumot, és egyik sem illeszkedik megfelelően a munkafolyamat-készlethez. Az egyszer megírt, a módok között megosztott bejáró azt is biztosítja, hogy minden mód pontosan ugyanazokat a szűrési szabályokat alkalmazza; ez kulcsfontosságú az oracle-vezérelt tesztelési stratégiában, mert a grep, a ripgrep és a ast-grep csak ugyanazon fájlkészlet bejárásával hasonlítható össze, mint amelyet ezek az eszközök is bejárnak.