Ga naar de inhoud

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.

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

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

De uitvoerindeling komt overeen met grep -rn:

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

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

Herschrijfmodus

Wordt geactiveerd door -p te combineren met -r. De vervangingssjabloon gebruikt dezelfde metavariabelen als het zoekpatroon; vastgelegde nodes worden op naam ingevoegd.

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

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 Regel­nummers 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.

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

Tekstindex

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

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:

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

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

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

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

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

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.

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

Voorbeelden

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

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 Regel­nummers 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.

Shell
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

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

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)