Referentie voor CLI
Greph bevat vier uitvoerbare bestanden. Ze gebruiken alle vier dezelfde engine; het verschil zit in de interface die ze bieden.
| Binair bestand | Doel |
|---|---|
greph |
Native tekst zoeken, AST zoeken en AST herschrijven |
greph-index |
Opgewarmde tekstindex, AST-feitenindex en gecachte AST-zoekopdracht |
rg |
Compatibiliteitswrapper in de stijl van ripgrep |
sg |
Compatibiliteitswrapper in de stijl van ast-grep |
Alle paden in de voorbeelden gebruiken ./vendor/bin/<binary>, dat werkt met Greph 0.2.3 of later als afhankelijkheid geïnstalleerd. Vervang dit door ./bin/<binary> als je vanuit een kloon van de repository werkt.
greph
Native tekst zoeken, AST zoeken en AST herschrijven.
greph [options] pattern [path...]
greph -p pattern [options] [path...]
greph -p pattern -r replacement [options] [path...]
Als een pad wordt weggelaten, wordt de huidige map doorzocht.
Tekstmodus
Standaardmodus. Patronen zijn PCRE2-regexes, tenzij -F is ingesteld.
# 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
De uitvoerindeling komt overeen met grep -rn:
src/Greph.php:31:final class Greph
src/Greph.php:36: public static function walk(...
AST-modus
Wordt geactiveerd door -p. Patronen worden geschreven als gewone PHP met $VAR- en $$$VARIADIC-metavariabelen. Zie Modi / AST-zoeken voor de volledige patroongrammatica.
./vendor/bin/greph -p 'new $CLASS()' src
./vendor/bin/greph -p '$obj->$method($$$ARGS)' src
./vendor/bin/greph -p 'function $name($$$PARAMS): void {}' src
Herschrijfmodus
Wordt geactiveerd door -p te combineren met -r. De vervangingssjabloon gebruikt dezelfde metavariabelen als het zoekpatroon; vastgelegde nodes worden op naam ingevoegd.
# 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
Opties
| Vlag | Betekenis |
|---|---|
-F |
Zoeken naar vaste tekenreeksen (geen regex) |
-i |
Niet-hoofdlettergevoelig zoeken |
-w |
Zoeken naar hele woorden |
-v |
Zoekresultaat omkeren |
-c |
Overeenkomsten per bestand tellen |
-l |
Alleen paden van bestanden met overeenkomsten weergeven |
-L |
Alleen paden van bestanden zonder overeenkomsten weergeven |
-h |
Bestandsnaamprefixen onderdrukken in tekstmodus |
-H |
Bestandsnaamprefixen altijd weergeven in tekstmodus |
-n |
Regelnummers weergeven (standaard: aan) |
-A N |
N regels na elke overeenkomst weergeven |
-B N |
N regels vóór elke overeenkomst weergeven |
-C N |
N contextregels vóór en na elke overeenkomst weergeven |
-m N |
Stoppen na N overeenkomsten per bestand |
-j N |
N parallelle workers gebruiken |
-p PATTERN |
AST-zoekpatroon |
-r TEMPLATE |
AST-herschrijfsjabloon (vereist -p) |
--glob GLOB |
Alleen bestanden opnemen waarvan de paden overeenkomen met GLOB |
--type NAME |
Een bestandstypealias opnemen (php, js, md, ...) |
--type-not NAME |
Een bestandstypealias uitsluiten |
--lang NAME |
AST-taal. Standaard: php |
--json |
JSON-uitvoer genereren |
--no-ignore |
Regels van .gitignore en .grephignore negeren |
--hidden |
Verborgen bestanden opnemen |
--dry-run |
Herschrijvingen weergeven zonder bestanden te schrijven |
--interactive |
Elk herschreven bestand bevestigen |
--help |
Inline-gebruiksinformatie weergeven |
greph-index
Opgewarmde tekstindex, AST-feitenindex en gecachte AST-zoekopdracht.
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...]
Tekstindex
# 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
De tekstindex is een opgewarmde opslagplaats voor trigram- en identifiervermeldingen. Deze staat standaard op .greph-index/ in de geïndexeerde hoofdmap.
Indexsets
Indexsets zetten herhaalde workflows met meerdere indexen om in een benoemd manifest:
./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)' .
Het standaardmanifestbestand is .greph-index-set.json. Elke vermelding verwijst naar een hoofdmap, een modus en een levenscyclusprofiel. set build en set refresh werken op de ingeschakelde vermeldingen; set search voert de zoekopdracht uit op de geselecteerde vermeldingen en verwijdert dubbele overeenkomsten.
AST-feitenindex
./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
De AST-feitenindex haalt feiten op node-niveau (aanroepen, instanties, klassen, methoden) op en slaat ze op in een doorzoekbare opslagplaats. Zoekopdrachten worden O(log n) uitgevoerd op de factsleutel en vervolgens gecontroleerd aan de hand van de bron. Deze staat standaard op .greph-ast-index/.
AST-cache
./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
De AST-cache slaat geparste bomen op schijf op, zodat zoekopdrachten de parser helemaal overslaan. Deze staat standaard op .greph-ast-cache/.
Opties
De opties voor tekstzoeken komen overeen met de vlaggenset van greph (-F, -i, -w, -v, -c, -l, -L, -A, -B, -C, -m, --glob, --type, --type-not, --json, --no-ignore, --hidden).
Extra vlaggen:
| Vlag | Betekenis |
|---|---|
--index-dir DIR |
Een niet-standaardmap voor de opgewarmde index gebruiken. Herhaalbaar voor zoeken en statistieken met meerdere indexen. |
--lifecycle PROFILE |
Bouwbeleid: static, manual-refresh, opportunistic-refresh, strict-stale-check |
--auto-refresh-max-files N |
Drempel voor bestanden bij opportunistische vernieuwing |
--auto-refresh-max-bytes N |
Drempel voor bytes bij opportunistische vernieuwing |
--manifest FILE |
Een indexsetmanifest laden. Standaard: .greph-index-set.json |
--mode MODE |
Setbewerkingen beperken tot text, ast-index of ast-cache |
--index NAME |
Setbewerkingen beperken tot een benoemde manifestvermelding. Herhaalbaar. |
--show-index-origin |
Uitvoer van zoeken met meerdere opgewarmde indexen of indexsets vooraf laten gaan door de naam van de overeenkomende indexvermelding |
--trace-plan |
Diagnostische informatie van de opgewarmde planner naar stderr sturen |
--dry-refresh |
In stats rapporteren wat een zoekopdracht met opgewarmde index zou doen, zonder iets te wijzigen |
--lang NAME |
AST-taal voor zoekopdrachten met ast-index / ast-cache. Standaard: php |
-j N, --jobs N |
Workers voor AST-scans |
-l, --files-with-matches |
Alleen paden van bestanden met overeenkomsten weergeven (AST-modus) |
--strict-parse |
Stoppen bij parseerfouten in plaats van deze over te slaan |
--fallback MODE |
Gedrag bij ontbrekende index: fail (standaard) of scan |
--help |
Inline-gebruiksinformatie weergeven |
rg
Compatibiliteitswrapper in de stijl van ripgrep. Ondersteunt de meestgebruikte ripgrep-vlaggen. De geverifieerde mogelijkheden zijn gepubliceerd in de functiematrix.
rg [options] pattern [path...]
rg --files [options] [path...]
Voorbeelden
./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" .
Ondersteunde opties
| Vlag | Betekenis |
|---|---|
-F, --fixed-strings |
Zoeken naar vaste tekenreeksen |
-i, --ignore-case |
Niet-hoofdlettergevoelig zoeken |
-w, --word-regexp |
Zoeken naar hele woorden |
-v, --invert-match |
Overeenkomsten omkeren |
-c, --count |
Regels met overeenkomsten tellen |
-l, --files-with-matches |
Bestanden met overeenkomsten weergeven |
--files-without-match |
Bestanden zonder overeenkomsten weergeven |
-I, --no-filename |
Bestandsnaamprefixen onderdrukken |
-H, --with-filename |
Bestandsnaamprefixen altijd weergeven |
-n, --line-number |
Regelnummers weergeven |
-A N, --after-context N |
N regels na elke overeenkomst weergeven |
-B N, --before-context N |
N regels vóór elke overeenkomst weergeven |
-C N, --context N |
N regels vóór en na elke overeenkomst weergeven |
-m N, --max-count N |
Stoppen na N overeenkomsten per bestand |
-j N, --threads N |
N parallelle workers gebruiken |
-e P, --regexp P |
Zoekpatroon |
-L, --follow |
Symbolische koppelingen volgen |
--glob GLOB |
Alleen bestanden opnemen waarvan de paden overeenkomen met GLOB |
--type NAME |
Een bestandstype opnemen |
--type-not NAME |
Een bestandstype uitsluiten |
--json |
ripgrep-gebeurtenissen in JSON-stijl genereren |
--no-ignore |
Regels van .gitignore en .grephignore negeren |
--hidden |
Verborgen bestanden opnemen |
--files |
Kandidatenbestanden weergeven in plaats van zoeken |
--help |
Inline-gebruiksinformatie weergeven |
sg
Compatibiliteitswrapper in de stijl van ast-grep. Ondersteunt de meestgebruikte ast-grep-vlaggen. De geverifieerde mogelijkheden zijn gepubliceerd in de functiematrix.
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
run is het canonieke ast-grep-commando. scan en rewrite zijn aliassen die alleen in de wrapper beschikbaar zijn en gangbaar gebruik weerspiegelen. Een aanroep zonder argumenten (sg --pattern ... .) werkt ook als een eenmalige zoekopdracht.
Voorbeelden
./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
Ondersteunde opties
| Vlag | Betekenis |
|---|---|
-p, --pattern PATTERN |
AST-patroon |
-r, --rewrite TEMPLATE |
Herschrijfsjabloon |
-l, --lang NAME |
AST-taal. Standaard: php |
-j, --threads N |
N parallelle workers gebruiken |
-i, --interactive |
Elke herschrijving bevestigen |
-U, --update-all |
Herschrijvingen zonder bevestiging toepassen |
--files-with-matches |
Alleen bestandspaden met overeenkomsten weergeven |
--json[=STYLE] |
JSON-uitvoer genereren. STIJL = pretty, stream of compact |
--no-ignore [MODE] |
Regels voor het negeren van repositories negeren |
--hidden |
Verborgen bestanden opnemen |
--glob GLOB, --globs GLOB |
Alleen bestanden opnemen waarvan de paden overeenkomen met GLOB |
--type NAME |
Een bestandstype opnemen |
--type-not NAME |
Een bestandstype uitsluiten |
--dry-run |
Herschrijvingen bekijken zonder bestanden te schrijven |
--help |
Inline-gebruiksinformatie weergeven |
Afsluitcodes
Greph volgt de conventies van grep / ripgrep:
| Code | Betekenis |
|---|---|
0 |
Er is minstens één overeenkomst gevonden (of, bij herschrijvingen, is minstens één bestand gewijzigd) |
1 |
Geen overeenkomsten gevonden |
2 |
Gebruiksfout of runtimefout (ongeldige argumenten, ontbrekende index, parseerfout in --strict-parse-modus) |