CLI žinynas
Greph pateikia keturis vykdomuosius failus. Visi keturi naudoja tą patį variklį; skiriasi tik jų teikiama sąsaja.
| Dvejetainis failas | Paskirtis |
|---|---|
greph |
Vietinė tekstinė paieška, AST paieška ir AST perrašymas |
greph-index |
Įšildytas tekstinis indeksas, AST faktų indeksas ir spartinančioji AST paieška |
rg |
ripgrep stiliaus suderinamumo apvalkalas |
sg |
ast-grep stiliaus suderinamumo apvalkalas |
Pavyzdžiuose naudojami keliai prasideda nuo ./vendor/bin/<binary>; tai veikia, jei Greph 0.2.3 jau įdiegta kaip priklausomybė. Jei dirbate su saugyklos klonu, pakeiskite į ./bin/<binary>.
greph
Vietinė tekstinė paieška, AST paieška ir AST perrašymas.
greph [options] pattern [path...]
greph -p pattern [options] [path...]
greph -p pattern -r replacement [options] [path...]
Jei kelias nenurodytas, ieškoma dabartiniame kataloge.
Teksto režimas
Numatytasis režimas. Šablonai yra PCRE2 regex išraiškos, nebent nustatyta -F.
# Regex search
./vendor/bin/greph "function\s+\w+" src
# Fixed-string search
./vendor/bin/greph -F "function" src
# Case-insensitive whole-word with two lines of context
./vendor/bin/greph -F -i -w -C 2 "function" src
Išvesties formatas atitinka grep -rn:
src/Greph.php:31:final class Greph
src/Greph.php:36: public static function walk(...
AST režimas
Suaktyvinama naudojant -p. Šablonai rašomi kaip įprastas PHP, naudojant $VAR ir $$$VARIADIC metakintamuosius. Visą šablonų gramatiką rasite skiltyje AST režimai / AST paieška.
./vendor/bin/greph -p 'new $CLASS()' src
./vendor/bin/greph -p '$obj->$method($$$ARGS)' src
./vendor/bin/greph -p 'function $name($$$PARAMS): void {}' src
Perrašymo režimas
Suaktyvinama kartu naudojant -p ir -r. Pakeitimo šablone naudojami tie patys metakintamieji kaip ir paieškos šablone; užfiksuoti mazgai įterpiami pagal pavadinimą.
# Preview only
./vendor/bin/greph -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src
# Apply
./vendor/bin/greph -p 'array($$$ITEMS)' -r '[$$$ITEMS]' src
# Confirm each file before writing
./vendor/bin/greph -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --interactive src
Parinktys
| Vėliavėlė | Reikšmė |
|---|---|
-F |
Paieška pagal fiksuotą eilutę (be regex) |
-i |
Paieška nepaisant raidžių registro |
-w |
Paieška pagal visą žodį |
-v |
Apversti atitikimą |
-c |
Suskaičiuoti atitikmenis kiekviename faile |
-l |
Pateikti tik atitinkančių failų kelius |
-L |
Pateikti tik neatitinkančių failų kelius |
-h |
Teksto režimu nerodyti failų pavadinimų prefiksų |
-H |
Teksto režimu visada rodyti failų pavadinimų prefiksus |
-n |
Rodyti eilučių numerius (numatyta: įjungta) |
-A N |
Rodyti N eilučių po kiekvieno atitikmens |
-B N |
Rodyti N eilučių prieš kiekvieną atitikmenį |
-C N |
Rodyti N konteksto eilučių prieš kiekvieną atitikmenį ir po jo |
-m N |
Sustoti radus N atitikmenų faile |
-j N |
Naudoti N lygiagrečių vykdytojų |
-p PATTERN |
AST paieškos šablonas |
-r TEMPLATE |
AST perrašymo šablonas (reikia -p) |
--glob GLOB |
Įtraukti tik failus, kurių keliai atitinka GLOB |
--type NAME |
Įtraukti failo tipo slapyvardį (php, js, md, ...) |
--type-not NAME |
Neįtraukti failo tipo slapyvardžio |
--lang NAME |
AST kalba. Numatytoji: php |
--json |
Generuoti JSON išvestį |
--no-ignore |
Nepaisyti .gitignore ir .grephignore taisyklių |
--hidden |
Įtraukti paslėptus failus |
--dry-run |
Rodyti perrašymus failų nekeičiant |
--interactive |
Patvirtinti kiekvieną perrašytą failą |
--help |
Rodyti trumpąją naudojimo instrukciją |
greph-index
Įšildytas tekstinis indeksas, AST faktų indeksas ir spartinančioji AST paieška.
greph-index build [path] [--index-dir DIR]
greph-index refresh [path] [--index-dir DIR]
greph-index search [options] pattern [path...]
greph-index set build [manifest] [--manifest FILE] [--mode MODE] [--index NAME...]
greph-index set refresh [manifest] [--manifest FILE] [--mode MODE] [--index NAME...]
greph-index set stats [manifest] [--manifest FILE] [--mode MODE] [--index NAME...] [--dry-refresh]
greph-index set search [options] pattern [path...]
greph-index ast-index build [path] [--index-dir DIR]
greph-index ast-index refresh [path] [--index-dir DIR]
greph-index ast-index search [options] pattern [path...]
greph-index ast-cache build [path] [--index-dir DIR]
greph-index ast-cache refresh [path] [--index-dir DIR]
greph-index ast-cache search [options] pattern [path...]
Teksto indeksas
# Build (full)
./vendor/bin/greph-index build .
# Build with lifecycle policy
./vendor/bin/greph-index build . \
--lifecycle opportunistic-refresh \
--auto-refresh-max-files 32 \
--auto-refresh-max-bytes 1048576
# Refresh (incremental: added, updated, deleted, unchanged)
./vendor/bin/greph-index refresh .
# Query
./vendor/bin/greph-index search -F "function" .
./vendor/bin/greph-index search -i -w "function" .
./vendor/bin/greph-index search -c "function" .
./vendor/bin/greph-index search --trace-plan -F "function" .
./vendor/bin/greph-index search -F "function" . \
--index-dir core/.greph-index \
--index-dir plugins/demo/.greph-index \
--show-index-origin
Teksto indeksas – tai įšildyta trigramų ir identifikatorių įrašų saugykla. Pagal numatytuosius nustatymus ji saugoma indeksuojamo šakninio katalogo vietoje .greph-index/.
Indeksų rinkiniai
Indeksų rinkiniai leidžia pasikartojančias kelių indeksų darbo sekas aprašyti įvardytu manifeste:
./vendor/bin/greph-index set build
./vendor/bin/greph-index set stats --dry-refresh
./vendor/bin/greph-index set search --show-index-origin -F "function" .
./vendor/bin/greph-index set search --mode ast-index 'new $CLASS()' .
./vendor/bin/greph-index set search --mode ast-cache 'array($$$ITEMS)' .
Numatytasis manifesto failas yra .greph-index-set.json. Kiekvienas įrašas nurodo šakninį katalogą, režimą ir gyvavimo ciklo profilį. set build ir set refresh veikia su įjungtais įrašais; set search vykdo paiešką pasirinktuose įrašuose ir pašalina besidubliuojančius atitikmenis.
AST faktų indeksas
./vendor/bin/greph-index ast-index build .
./vendor/bin/greph-index ast-index refresh .
./vendor/bin/greph-index ast-index search 'new $CLASS()' src
./vendor/bin/greph-index ast-index search --trace-plan 'new $CLASS()' src
./vendor/bin/greph-index ast-index search 'new $CLASS()' . \
--index-dir core/.greph-ast-index \
--index-dir plugins/demo/.greph-ast-index \
--show-index-origin
AST faktų indeksas išskiria mazgų lygmens faktus (iškvietimus, egzempliorių kūrimą, klases, metodus) į užklausoms pritaikytą saugyklą. Pirmiausia pagal faktų raktą atliekama O(log n) paieška, o tada rezultatai patikrinami pagal šaltinį. Pagal numatytuosius nustatymus saugoma adresu .greph-ast-index/.
AST talpykla
./vendor/bin/greph-index ast-cache build .
./vendor/bin/greph-index ast-cache refresh .
./vendor/bin/greph-index ast-cache search 'array($$$ITEMS)' src
./vendor/bin/greph-index ast-cache search --trace-plan 'array($$$ITEMS)' src
AST talpykloje medyje saugomi išanalizuoti failai, todėl atliekant paiešką analizatoriaus nebereikia. Pagal numatytuosius nustatymus saugoma adresu .greph-ast-cache/.
Parinktys
Tekstinės paieškos parinktys atitinka greph vėliavėlių rinkinį (-F, -i, -w, -v, -c, -l, -L, -A, -B, -C, -m, --glob, --type, --type-not, --json, --no-ignore, --hidden).
Papildomos vėliavėlės:
| Vėliavėlė | Reikšmė |
|---|---|
--index-dir DIR |
Naudoti ne numatytąjį įšildyto indekso katalogą. Galima kartoti atliekant kelių indeksų paiešką ir gaunant statistiką. |
--lifecycle PROFILE |
Kūrimo politika: static, manual-refresh, opportunistic-refresh, strict-stale-check |
--auto-refresh-max-files N |
Proginio atnaujinimo failų slenkstis |
--auto-refresh-max-bytes N |
Proginio atnaujinimo baitų slenkstis |
--manifest FILE |
Įkelti indeksų rinkinio manifestą. Numatytoji reikšmė: .greph-index-set.json |
--mode MODE |
Apriboti rinkinio operacijas iki text, ast-index arba ast-cache |
--index NAME |
Apriboti rinkinio operacijas iki įvardyto manifesto įrašo. Galima kartoti. |
--show-index-origin |
Įšildytos kelių indeksų arba rinkinio išvesties pradžioje pateikti atitinkamo indekso įrašo pavadinimą |
--trace-plan |
Pateikti įšildyto planuoklio diagnostiką į stderr |
--dry-refresh |
stats režimu pranešti, ką darytų įšildyta paieška, nieko nekeičiant |
--lang NAME |
AST kalba ast-index / ast-cache paieškoms. Numatytoji: php |
-j N, --jobs N |
AST paieškų vykdytojai |
-l, --files-with-matches |
Pateikti tik atitinkančių failų kelius (AST režimu) |
--strict-parse |
Nutrūkti įvykus analizės klaidoms, o ne jas praleisti |
--fallback MODE |
Elgsena, kai nėra indekso: fail (numatytoji) arba scan |
--help |
Rodyti trumpąją naudojimo instrukciją |
rg
ripgrep stiliaus suderinamumo apvalkalas. Palaiko dažniausiai naudojamas ripgrep vėliavėles. Patikrintas funkcijų rinkinys paskelbtas funkcijų matricoje.
rg [options] pattern [path...]
rg --files [options] [path...]
Pavyzdžiai
./vendor/bin/rg -F "function" src
./vendor/bin/rg --json -F "function" src
./vendor/bin/rg --files src
./vendor/bin/rg --files --type php .
./vendor/bin/rg --type-not js -F "function" .
Palaikomos parinktys
| Vėliavėlė | Reikšmė |
|---|---|
-F, --fixed-strings |
Paieška pagal fiksuotą eilutę |
-i, --ignore-case |
Paieška nepaisant raidžių registro |
-w, --word-regexp |
Paieška pagal visą žodį |
-v, --invert-match |
Apversti atitikmenis |
-c, --count |
Suskaičiuoti atitinkančias eilutes |
-l, --files-with-matches |
Pateikti atitinkančius failus |
--files-without-match |
Pateikti neatitinkančius failus |
-I, --no-filename |
Nerodyti failų pavadinimų prefiksų |
-H, --with-filename |
Visada rodyti failų pavadinimų prefiksus |
-n, --line-number |
Rodyti eilučių numerius |
-A N, --after-context N |
Rodyti N eilučių po kiekvieno atitikmens |
-B N, --before-context N |
Rodyti N eilučių prieš kiekvieną atitikmenį |
-C N, --context N |
Rodyti N eilučių prieš kiekvieną atitikmenį ir po jo |
-m N, --max-count N |
Sustoti radus N atitikmenų faile |
-j N, --threads N |
Naudoti N lygiagrečių vykdytojų |
-e P, --regexp P |
Paieškos šablonas |
-L, --follow |
Vykdyti simbolines nuorodas |
--glob GLOB |
Įtraukti tik failus, kurių keliai atitinka GLOB |
--type NAME |
Įtraukti failo tipą |
--type-not NAME |
Neįtraukti failo tipo |
--json |
Generuoti ripgrep stiliaus JSON įvykius |
--no-ignore |
Nepaisyti .gitignore ir .grephignore taisyklių |
--hidden |
Įtraukti paslėptus failus |
--files |
Pateikti galimus failus, o ne atlikti paiešką |
--help |
Rodyti trumpąją naudojimo instrukciją |
sg
ast-grep stiliaus suderinamumo apvalkalas. Palaiko dažniausiai naudojamas ast-grep vėliavėles. Patikrintas funkcijų rinkinys paskelbtas funkcijų matricoje.
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
run yra pagrindinis ast-grep veiksmažodis. scan ir rewrite yra tik apvalkalo slapyvardžiai, atkartojantys įprastą naudojimą. Galima vykdyti ir be argumentų (sg --pattern ... .), jei norite atlikti vienkartinę paiešką.
Pavyzdžiai
./vendor/bin/sg run --pattern 'array($$$ITEMS)' src/App.php
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' src/App.php
./vendor/bin/sg run --pattern 'array($$$ITEMS)' --rewrite '[$$$ITEMS]' --update-all src/App.php
./vendor/bin/sg run --json --pattern 'dispatch($EVENT)' src/App.php
./vendor/bin/sg scan -p 'array($$$ITEMS)' src/App.php
./vendor/bin/sg rewrite -p 'array($$$ITEMS)' -r '[$$$ITEMS]' --dry-run src/App.php
Palaikomos parinktys
| Vėliavėlė | Reikšmė |
|---|---|
-p, --pattern PATTERN |
AST šablonas |
-r, --rewrite TEMPLATE |
Perrašymo šablonas |
-l, --lang NAME |
AST kalba. Numatytoji: php |
-j, --threads N |
Naudoti N lygiagrečių vykdytojų |
-i, --interactive |
Patvirtinti kiekvieną perrašymą |
-U, --update-all |
Taikyti perrašymus be patvirtinimo |
--files-with-matches |
Pateikti tik failų su atitikmenimis kelius |
--json[=STYLE] |
Generuoti JSON išvestį. STYLE = pretty, stream arba compact |
--no-ignore [MODE] |
Nepaisyti saugyklos ignoravimo taisyklių |
--hidden |
Įtraukti paslėptus failus |
--glob GLOB, --globs GLOB |
Įtraukti tik failus, kurių keliai atitinka GLOB |
--type NAME |
Įtraukti failo tipą |
--type-not NAME |
Neįtraukti failo tipo |
--dry-run |
Peržiūrėti perrašymus failų nekeičiant |
--help |
Rodyti trumpąją naudojimo instrukciją |
Išėjimo kodai
Greph vadovaujasi grep / ripgrep konvencijomis:
| Kodas | Reikšmė |
|---|---|
0 |
Rastas bent vienas atitikmuo (arba, perrašymo atveju, pakeistas bent vienas failas) |
1 |
Atitikmenų nerasta |
2 |
Naudojimo klaida arba vykdymo triktis (netinkami argumentai, trūkstamas indeksas, analizės klaida --strict-parse režimu) |