Pereiti prie turinio

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 .gitignore ir .grephignore taisyklių, į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.

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

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 .gitignore failai 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 .gitignore katalogu.
  • ** 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ą.

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.