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.
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.
# 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:
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.
./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.
# 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.
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
# 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:
./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
./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
./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.
rg [options] pattern [path...]
rg --files [options] [path...]
Esimerkkejä
./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.
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ä
./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) |