Pereiti prie turinio

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.

Shell
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.

Shell
# 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:

Text
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.

Shell
./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ą.

Shell
# 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.

Shell
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

Shell
# 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:

Shell
./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

Shell
./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

Shell
./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.

Shell
rg [options] pattern [path...]
rg --files [options] [path...]

Pavyzdžiai

Shell
./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.

Shell
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

Shell
./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)