Siirry sisältöön

CLI-viite

Greph sisältää neljä suoritettavaa tiedostoa. Kaikilla neljällä on sama moottori; niiden erot koskevat niiden tarjoamaa käyttöliittymää.

Suoritettava tiedosto Käyttötarkoitus
greph Natiivi tekstihaku, AST-haku ja AST-uudelleenkirjoitus
greph-index Lämmitetty tekstihakemisto, AST-faktahakemisto ja välimuistissa oleva AST-haku
rg ripgrep-tyylinen yhteensopivuuskerros
sg ast-grep-tyylinen yhteensopivuuskerros

Esimerkkien poluissa käytetään ./vendor/bin/<binary>-tiedostoa, joka toimii, kun Greph 0.2.3 on asennettu riippuvuutena tai uudempi versio. Käytä ./bin/<binary>-polkua, jos työskentelet arkistokloonista.


greph

Natiivi tekstihaku, AST-haku ja AST-uudelleenkirjoitus.

Shell
greph [options] pattern [path...]
greph -p pattern [options] [path...]
greph -p pattern -r replacement [options] [path...]

Jos polku jätetään pois, haku tehdään nykyisestä hakemistosta.

Tekstitila

Oletustila. Mallit ovat PCRE2-säännöllisiä lausekkeita, ellei -F ole asetettu.

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

Tulostusmuoto vastaa grep -rn-tulostusta:

Text
src/Greph.php:31:final class Greph
src/Greph.php:36:    public static function walk(...

AST-tila

Otettu käyttöön asetuksella -p. Mallit kirjoitetaan tavallisena PHP-koodina, jossa käytetään $VAR- ja $$$VARIADIC-metamuuttujia. Katso täydellinen mallikieli kohdasta Tilat / AST-haku.

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

Uudelleenkirjoitustila

Otettu käyttöön yhdistämällä -p ja -r. Korvausmallissa käytetään samoja metamuuttujia kuin hakumallissa; talteen otetut solmut sijoitetaan mukaan nimensä perusteella.

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

Asetukset

Valitsin Merkitys
-F Kiinteän merkkijonon haku (ei säännöllistä lauseketta)
-i Kirjainkoosta riippumaton täsmäytys
-w Kokonaisen sanan täsmäytys
-v Käännä täsmäytys
-c Laske osumat tiedostoittain
-l Luettele vain osumia sisältävien tiedostojen polut
-L Luettele vain tiedostojen polut, joissa ei ole osumia
-h Piilota tiedostonimien etuliitteet tekstitilassa
-H Tulosta tiedostonimien etuliitteet aina tekstitilassa
-n Näytä rivinumerot (oletus: käytössä)
-A N Näytä N riviä kunkin osuman jälkeen
-B N Näytä N riviä kunkin osuman ennen
-C N Näytä N kontekstiriviä kunkin osuman ympäriltä
-m N Lopeta N osuman jälkeen tiedostoa kohden
-j N Käytä N rinnakkaista työntekijää
-p PATTERN AST-hakumalli
-r TEMPLATE AST-uudelleenkirjoitusmalli (edellyttää -p)
--glob GLOB Sisällytä vain tiedostot, joiden polku vastaa GLOB-mallia
--type NAME Sisällytä tiedostotyyppialias (php, js, md, ...)
--type-not NAME Jätä tiedostotyyppialias pois
--lang NAME AST-kieli. Oletus: php
--json Tuota JSON-tulostus
--no-ignore Ohita .gitignore- ja .grephignore-säännöt
--hidden Sisällytä piilotetut tiedostot
--dry-run Tulosta uudelleenkirjoitukset tallentamatta tiedostoja
--interactive Vahvista jokainen uudelleenkirjoitettu tiedosto
--help Näytä käyttöohje lyhyesti

greph-index

Lämmitetty tekstihakemisto, AST-faktahakemisto ja välimuistissa oleva AST-haku.

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

Teksti-indeksi

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

Teksti-indeksi on lämmitetty trigrammi- ja tunnisteosumien tietovarasto. Se sijaitsee indeksoidun juurihakemiston polussa .greph-index/ oletusarvoisesti.

Indeksijoukot

Indeksijoukot kokoavat toistuvat usean indeksin työnkulut nimetyksi luetteloksi:

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)' .

Oletusarvoinen luettelotiedosto on .greph-index-set.json. Kukin merkintä osoittaa juureen, tilaan ja elinkaariprofiiliin. set build ja set refresh käsittelevät käytössä olevia merkintöjä; set search suorittaa haun valituissa merkinnöissä ja poistaa päällekkäiset osumat.

AST-faktahakemisto

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-faktahakemisto poimii solmutason faktoja (kutsut, ilmentymien luonnit, luokat, metodit) kyseltävään tietovarastoon. Haut tehdään ensin O(log n) faktan avaimella ja tarkistetaan sitten lähdekoodista. Oletustallennuspolku on .greph-ast-index/.

AST-välimuisti

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-välimuisti tallentaa jäsennetyt puut levylle, jolloin haut ohittavat jäsentimen kokonaan. Oletustallennuspolku on .greph-ast-cache/.

Asetukset

Tekstihaun asetukset vastaavat greph-valitsimia (-F, -i, -w, -v, -c, -l, -L, -A, -B, -C, -m, --glob, --type, --type-not, --json, --no-ignore, --hidden).

Lisävalitsimet:

Valitsin Merkitys
--index-dir DIR Käytä muuta kuin oletusarvoista lämmitettyä indeksihakemistoa. Voidaan toistaa usean indeksin haussa ja tilastoissa.
--lifecycle PROFILE Koontikäytäntö: static, manual-refresh, opportunistic-refresh, strict-stale-check
--auto-refresh-max-files N Tilapäivityksen tiedostokynnys
--auto-refresh-max-bytes N Tilapäivityksen tavukynnys
--manifest FILE Lataa indeksijoukon luettelo. Oletus: .greph-index-set.json
--mode MODE Rajaa joukkotoiminnot arvoihin text, ast-index tai ast-cache
--index NAME Rajaa joukkotoiminnot nimettyyn luettelomerkintään. Voidaan toistaa.
--show-index-origin Lisää lämmitetyn monen indeksin tai joukon tulosteen alkuun vastaavan indeksimerkinnän nimi
--trace-plan Tulosta lämmitetyn suunnittelijan diagnostiikkatiedot kohteeseen stderr
--dry-refresh Tilassa stats ilmoita, mitä lämmitetty haku tekisi muuttamatta mitään
--lang NAME AST-kieli hauille ast-index / ast-cache. Oletus: php
-j N, --jobs N AST-läpikäyntien työntekijämäärä
-l, --files-with-matches Luettele vain osumia sisältävien tiedostojen polut (AST-tila)
--strict-parse Keskeytä jäsennysvirheen ilmetessä äläkä ohita sitä
--fallback MODE Puuttuvan indeksin käsittely: fail (oletus) tai scan
--help Näytä käyttöohje lyhyesti

rg

ripgrep-tyylinen yhteensopivuuskerros. Tukee yleisimmin käytettyjä ripgrep-valitsimia. Vahvistetut ominaisuudet on julkaistu ominaisuusmatriisissa.

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

Esimerkkejä

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

Tuetut asetukset

Valitsin Merkitys
-F, --fixed-strings Kiinteän merkkijonon haku
-i, --ignore-case Kirjainkoosta riippumaton haku
-w, --word-regexp Kokonaisen sanan haku
-v, --invert-match Käännä osumat
-c, --count Laske osumarivit
-l, --files-with-matches Luettele osumia sisältävät tiedostot
--files-without-match Luettele tiedostot, joissa ei ole osumia
-I, --no-filename Piilota tiedostonimien etuliitteet
-H, --with-filename Tulosta tiedostonimien etuliitteet aina
-n, --line-number Näytä rivinumerot
-A N, --after-context N Näytä N riviä kunkin osuman jälkeen
-B N, --before-context N Näytä N riviä kunkin osuman ennen
-C N, --context N Näytä N riviä ennen kutakin osumaa ja sen jälkeen
-m N, --max-count N Lopeta N osuman jälkeen tiedostoa kohden
-j N, --threads N Käytä N rinnakkaista työntekijää
-e P, --regexp P Hakumalli
-L, --follow Seuraa symbolisia linkkejä
--glob GLOB Sisällytä vain tiedostot, joiden polku vastaa GLOB-mallia
--type NAME Sisällytä tiedostotyyppi
--type-not NAME Jätä tiedostotyyppi pois
--json Tuota ripgrep-tyylisiä JSON-tapahtumia
--no-ignore Ohita .gitignore- ja .grephignore-säännöt
--hidden Sisällytä piilotetut tiedostot
--files Luettele ehdokastiedostot haun sijaan
--help Näytä käyttöohje lyhyesti

sg

ast-grep-tyylinen yhteensopivuuskerros. Tukee yleisimmin käytettyjä ast-grep-valitsimia. Vahvistetut ominaisuudet on julkaistu ominaisuusmatriisissa.

Shell
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]

run on kanoninen ast-grep-verbi. scan ja rewrite ovat vain yhteensopivuuskerroksen aliaksia, jotka vastaavat yleistä käyttötapaa. Myös pelkkä komento (sg --pattern ... .) toimii kertaluonteisena hakuna.

Esimerkkejä

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

Tuetut asetukset

Valitsin Merkitys
-p, --pattern PATTERN AST-malli
-r, --rewrite TEMPLATE Uudelleenkirjoitusmalli
-l, --lang NAME AST-kieli. Oletus: php
-j, --threads N Käytä N rinnakkaista työntekijää
-i, --interactive Vahvista jokainen uudelleenkirjoitus
-U, --update-all Käytä uudelleenkirjoituksia ilman vahvistusta
--files-with-matches Tulosta vain osumia sisältävien tiedostojen polut
--json[=STYLE] Tuota JSON-tulostus. TYYLI = pretty, stream tai compact
--no-ignore [MODE] Ohita repositorion ohitussäännöt
--hidden Sisällytä piilotetut tiedostot
--glob GLOB, --globs GLOB Sisällytä vain tiedostot, joiden polku vastaa GLOB-mallia
--type NAME Sisällytä tiedostotyyppi
--type-not NAME Jätä tiedostotyyppi pois
--dry-run Esikatsele uudelleenkirjoitukset tallentamatta tiedostoja
--help Näytä käyttöohje lyhyesti

Palautuskoodit

Greph noudattaa grepin / ripgrep-käytäntöjä:

Koodi Merkitys
0 Vähintään yksi osuma löytyi (tai uudelleenkirjoituksessa vähintään yhtä tiedostoa muutettiin)
1 Osumia ei löytynyt
2 Käyttövirhe tai suorituksenaikainen virhe (virheelliset argumentit, puuttuva indeksi, jäsennysvirhe tilassa --strict-parse)