Hoppa till innehåll

Referens för CLI

Greph innehåller fyra körbara filer. Alla fyra delar samma motor; skillnaden ligger i vilket gränssnitt de erbjuder.

Binärfil Syfte
greph Inbyggd textsökning, AST-sökning och AST-omskrivning
greph-index Uppvärmt textindex, AST-faktindex och cachad AST-sökning
rg Kompatibilitetsomslag i ripgrep-stil
sg Kompatibilitetsomslag i ast-grep-stil

Alla sökvägar i exemplen använder ./vendor/bin/<binary>, som fungerar med Greph 0.2.3 eller senare installerade som ett beroende. Byt ut mot ./bin/<binary> om du arbetar från en klon av kodförrådet.


greph

Inbyggd textsökning, AST-sökning och AST-omskrivning.

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

Om en sökväg utelämnas genomsöks den aktuella katalogen.

Textläge

Standardläge. Mönster är PCRE2-regex om inte -F har angetts.

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

Utdataformatet matchar grep -rn:

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

AST-läge

Aktiveras med -p. Mönster skrivs som vanlig PHP med metanamnvariablerna $VAR och $$$VARIADIC. Se Lägen / AST-sökning för den fullständiga grammatiken för mönster.

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

Omskrivningsläge

Aktiveras genom att kombinera -p med -r. Ersättningsmallen använder samma metanamnvariabler som sökmönstret; fångade noder infogas med namn.

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

Alternativ

Flagga Betydelse
-F Sökning efter fast sträng (inget regex)
-i Skiftlägesokänslig matchning
-w Matchning av hela ord
-v Invertera matchning
-c Räkna matchningar per fil
-l Visa endast sökvägar till filer med matchningar
-L Visa endast sökvägar till filer utan matchningar
-h Dölj filnamnsprefix i textläge
-H Visa alltid filnamnsprefix i textläge
-n Visa radnummer (standard: på)
-A N Visa N rader efter varje matchning
-B N Visa N rader före varje matchning
-C N Visa N kontextrader före och efter varje matchning
-m N Avsluta efter N matchningar per fil
-j N Använd N parallella arbetare
-p PATTERN AST-sökmönster
-r TEMPLATE AST-omskrivningsmall (kräver -p)
--glob GLOB Inkludera endast filer vars sökvägar matchar GLOB
--type NAME Inkludera ett filtypsalias (php, js, md, ...)
--type-not NAME Exkludera ett filtypsalias
--lang NAME AST-språk. Standard: php
--json Skriv utdata i formatet JSON
--no-ignore Ignorera reglerna .gitignore och .grephignore
--hidden Inkludera dolda filer
--dry-run Visa omskrivningar utan att skriva till filer
--interactive Bekräfta varje omskriven fil
--help Visa kort hjälp om användningen

greph-index

Uppvärmt textindex, AST-faktindex och cachad AST-sökning.

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

Textindex

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

Textindexet är ett uppvärmt index med trigram och identifierarposteringar. Som standard finns det i .greph-index/ i den indexerade rotkatalogen.

Indexuppsättningar

Indexuppsättningar omvandlar återkommande arbetsflöden med flera index till ett namngivet 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)' .

Standardmanifestfilen är .greph-index-set.json. Varje post pekar på en rot, ett läge och en livscykelprofil. set build och set refresh används för de aktiverade posterna; set search söker igenom de valda posterna och tar bort överlappande matchningar.

AST-faktindex

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-faktindexet extraherar fakta på nodnivå (anrop, instansieringar, klasser, metoder) till ett sökbart lager. Uppslag görs med O(log n) på faktanyckeln och verifieras sedan mot källkoden. Lagringsplatsen är .greph-ast-index/ som standard.

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

AST-cachen lagrar parsade träd på disk, så att sökningar kan hoppa över parsern helt. Lagringsplatsen är .greph-ast-cache/ som standard.

Alternativ

Alternativen för textsökning matchar flaggorna i greph (-F, -i, -w, -v, -c, -l, -L, -A, -B, -C, -m, --glob, --type, --type-not, --json, --no-ignore, --hidden).

Ytterligare flaggor:

Flagga Betydelse
--index-dir DIR Använd en annan katalog för uppvärmt index än standardkatalogen. Kan upprepas vid sökning i och statistik för flera index.
--lifecycle PROFILE Byggpolicy: static, manual-refresh, opportunistic-refresh, strict-stale-check
--auto-refresh-max-files N Tröskel för filer vid opportunistisk uppdatering
--auto-refresh-max-bytes N Tröskel för byte vid opportunistisk uppdatering
--manifest FILE Läs in ett manifest för indexuppsättning. Standard: .greph-index-set.json
--mode MODE Begränsa åtgärder för uppsättningen till text, ast-index eller ast-cache
--index NAME Begränsa åtgärder för uppsättningen till en namngiven manifestpost. Kan upprepas.
--show-index-origin Lägg till namnet på den matchande indexposten som prefix för utdata från sökning i eller uppsättning av flera uppvärmda index
--trace-plan Skriv ut diagnostik för den uppvärmda planeraren till stderr
--dry-refresh I stats: rapportera vad en uppvärmd sökning skulle göra utan att ändra något
--lang NAME AST-språk för sökningar med ast-index / ast-cache. Standard: php
-j N, --jobs N Arbetare för AST-genomsökningar
-l, --files-with-matches Visa endast sökvägar till filer med matchningar (AST-läge)
--strict-parse Avsluta vid parseringsfel i stället för att hoppa över dem
--fallback MODE Hantering när index saknas: fail (standard) eller scan
--help Visa kort hjälp om användningen

rg

Kompatibilitetsomslag i ripgrep-stil. Stöder de vanligaste flaggorna i ripgrep. De verifierade alternativen finns i funktionsmatrisen.

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

Exempel

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

Alternativ som stöds

Flagga Betydelse
-F, --fixed-strings Sökning efter fast sträng
-i, --ignore-case Skiftlägesokänslig sökning
-w, --word-regexp Sökning efter hela ord
-v, --invert-match Invertera matchningar
-c, --count Räkna matchande rader
-l, --files-with-matches Visa filer med matchningar
--files-without-match Visa filer utan matchningar
-I, --no-filename Dölj filnamnsprefix
-H, --with-filename Visa alltid filnamnsprefix
-n, --line-number Visa radnummer
-A N, --after-context N Visa N rader efter varje matchning
-B N, --before-context N Visa N rader före varje matchning
-C N, --context N Visa N rader före och efter varje matchning
-m N, --max-count N Avsluta efter N matchningar per fil
-j N, --threads N Använd N parallella arbetare
-e P, --regexp P Sökmönster
-L, --follow Följ symboliska länkar
--glob GLOB Inkludera endast filer vars sökvägar matchar GLOB
--type NAME Inkludera en filtyp
--type-not NAME Exkludera en filtyp
--json Skriv händelser i ripgrep-stil i JSON
--no-ignore Ignorera reglerna .gitignore och .grephignore
--hidden Inkludera dolda filer
--files Visa kandidater bland filer i stället för att söka
--help Visa kort hjälp om användningen

sg

Kompatibilitetsomslag i ast-grep-stil. Stöder de vanligaste flaggorna i ast-grep. De verifierade alternativen finns i funktionsmatrisen.

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

run är det kanoniska ast-grep-kommandot. scan och rewrite är alias som endast finns i omslaget och speglar vanligt bruk. Det går även att köra kommandot utan argument (sg --pattern ... .) för en engångssökning.

Exempel

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

Alternativ som stöds

Flagga Betydelse
-p, --pattern PATTERN AST-mönster
-r, --rewrite TEMPLATE Omskrivningsmall
-l, --lang NAME AST-språk. Standard: php
-j, --threads N Använd N parallella arbetare
-i, --interactive Bekräfta varje omskrivning
-U, --update-all Tillämpa omskrivningar utan bekräftelse
--files-with-matches Visa endast sökvägar till filer med matchningar
--json[=STYLE] Skriv utdata i formatet JSON. FORMAT = pretty, stream eller compact
--no-ignore [MODE] Ignorera kodförrådets ignoreringsregler
--hidden Inkludera dolda filer
--glob GLOB, --globs GLOB Inkludera endast filer vars sökvägar matchar GLOB
--type NAME Inkludera en filtyp
--type-not NAME Exkludera en filtyp
--dry-run Förhandsgranska omskrivningar utan att skriva till filer
--help Visa kort hjälp om användningen

Avslutningskoder

Greph följer konventionerna för grep / ripgrep:

Kod Betydelse
0 Minst en matchning hittades (eller, vid omskrivningar, ändrades minst en fil)
1 Inga matchningar hittades
2 Användningsfel eller körtidsfel (felaktiga argument, saknat index, parseringsfel i läget --strict-parse)