Liigu sisu juurde

Failipuus liikuja

Iga Greph režiim (tekst, AST, ümberkirjutus, indekseeritud tekst, indekseeritud AST, vahemällu salvestatud AST, rg ümbris, sg ümbris) alustab failipuu läbimisest ja Greph\Walker\FileList koostamisest. Läbija on ühine, seega kehtivad samad lipud ja käitumine kõikjal.

Vaikekäitumine

Vaikimisi teeb läbija järgmist:

  • Läbib rekursiivselt kõik kataloogid määratud asukohtade all.
  • Järgib igal tasemel .gitignore ja .grephignore reegleid, sealhulgas pesastatud ülekirjutusi ja eitusreegleid.
  • Jätab vahele kataloogi .git.
  • Jätab vahele peidetud failid ja kataloogid (kõik, mis algab märgiga .).
  • Jätab vahele binaarfailid (tuvastatakse faili esimese 512 baidi nullbaitide järgi).
  • Jätab vahele failid, mis on suuremad kui 10 MiB.
  • Ei järgi sümbollinke.

Ülekirjutuslipud

Lipp Mõju
--no-ignore Eirab reegleid .gitignore ja .grephignore
--hidden Kaasab peidetud failid ja kataloogid
--type NAME Kaasab ainult failid, mis vastavad nimetatud tüübialiasele
--type-not NAME Jätab välja failid, mis vastavad nimetatud tüübialiasele
--glob GLOB Kaasab ainult failid, mille tee vastab GLOB-mustrile. Korduskasutatav.

Sama valikute komplekt on programmipõhiseks kasutuseks saadaval ka Greph\Walker\WalkOptions kaudu.

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'],
));

Failitüübi aliased

Greph sisaldab väikest valikut nimetatud failitüüpe. Iga alias vastab laiendite loendile:

Alias Laiendid
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

Täieliku loendi leiate failist Greph\Walker\FileTypeFilter::TYPE_MAP.

.gitignore'i semantika

Greph rakendab gitignore'i sobitamist puhtalt PHP-s. Semantika vastab git check-ignore käitumisele:

  • Mustreid hinnatakse nende asukohakataloogi suhtes.
  • Pesastatud failid .gitignore tühistavad ülemkataloogi reeglid.
  • Eitus (!pattern) kaasab uuesti varem välja jäetud tee.
  • Lõpus olev / piirab mustri kataloogidega.
  • Alguses olev / seob mustri faili .gitignore kataloogiga.
  • ** vastab suvalisele arvule teelõikudele.

.grephignore kasutab sama süntaksit ja lisandub .gitignore peale. See sobib tööriistapõhiste välistuste jaoks, mida te ei soovi versioonihaldusesse lisada.

Teostus asub kataloogis Greph\Walker\GitignoreFilter.

Binaarfailide tuvastamine

Läbija kontrollib iga faili esimeses 512 baidis nullbaitide olemasolu. Kui neid leidub, käsitatakse faili binaarfailina ja jäetakse vahele. Nii leitakse levinud juhtumid, kus hoidla indekseeritud kataloogis leidub pilte, arhiive või kompileeritud faile.

Binaarfailide otsimiseks määrake vastava Options objekti väärtuseks skipBinaryFiles: false. CLI seda lippu praegu ei paku; kasutage fassaadi.

Vaikimisi sümbollinke ei järgita. Nende järgimiseks määrake followSymlinks: true või edastage -L / --follow ümbrisele rg. Läbija jälgib külastatud katalooge, et sümbollingid ei põhjustaks lõputut rekursiooni.

Faili maksimaalne suurus

Failid, mis on suuremad kui maxFileSizeBytes (vaikimisi 10 MiB), jäetakse vahele. Nii ei loeta kogemata 1 GB logifaili mällu. Suuremate sisendite katmiseks muutke piirangut objektis Options.

Miks kasutada kohandatud läbijat

Greph võiks kasutada glob() või RecursiveDirectoryIterator, kuid kumbki ei rakenda gitignore'i semantikat, ei tunne .grephignore ega integreeru hästi tööprotsesside kogumiga. Läbija ühekordne kirjutamine ja jagamine eri režiimide vahel tähendab ka seda, et igas režiimis rakenduvad täpselt samad filtreerimisreeglid. See on võrdluspõhise testimise jaoks hädavajalik: ainus viis võrrelda grep, ripgrep ja ast-grep tulemusi on läbida sama failikogum, mida need tööriistad läbivad.