Ugrás a tartalomhoz

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 .grephignore szabályait, a beágyazott felülírásokat és tagadásokat is.
  • Kihagyja a .git kö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.

PHP
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 .gitignore fá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 .gitignore kö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.

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.