Référence CLI
Greph fournit quatre exécutables. Ils partagent tous le même moteur ; seule leur interface diffère.
| Binaire | Fonction |
|---|---|
greph |
Recherche textuelle native, recherche AST et réécriture AST |
greph-index |
Index textuel préchauffé, index de faits AST et recherche AST mise en cache |
rg |
Enveloppe de compatibilité de type ripgrep |
sg |
Enveloppe de compatibilité de type ast-grep |
Tous les chemins des exemples utilisent ./vendor/bin/<binary>, qui fonctionne avec Greph 0.2.3 ou une version ultérieure installée comme dépendance. Remplacez-le par ./bin/<binary> si vous travaillez à partir d’un clone du dépôt.
greph
Recherche textuelle native, recherche AST et réécriture AST.
greph [options] pattern [path...]
greph -p pattern [options] [path...]
greph -p pattern -r replacement [options] [path...]
Si le chemin est omis, la recherche porte sur le répertoire courant.
Mode texte
Mode par défaut. Les motifs sont des expressions régulières PCRE2, sauf si -F est défini.
# 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
Le format de sortie correspond à grep -rn :
src/Greph.php:31:final class Greph
src/Greph.php:36: public static function walk(...
Mode AST
Activé par -p. Les motifs sont écrits comme du PHP ordinaire avec des métavariables $VAR et $$$VARIADIC. Consultez Modes / Recherche AST pour connaître la grammaire complète des motifs.
./vendor/bin/greph -p 'new $CLASS()' src
./vendor/bin/greph -p '$obj->$method($$$ARGS)' src
./vendor/bin/greph -p 'function $name($$$PARAMS): void {}' src
Mode réécriture
Activé en combinant -p et -r. Le modèle de remplacement utilise les mêmes métavariables que le motif de recherche ; les nœuds capturés sont insérés par nom.
# 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
Options
| Option | Signification |
|---|---|
-F |
Recherche de chaînes exactes (sans expression régulière) |
-i |
Recherche sans distinction entre majuscules et minuscules |
-w |
Correspondance sur des mots entiers |
-v |
Inverser la correspondance |
-c |
Compter les correspondances par fichier |
-l |
Lister uniquement les chemins des fichiers correspondants |
-L |
Lister uniquement les chemins des fichiers sans correspondance |
-h |
Supprimer les préfixes de nom de fichier en mode texte |
-H |
Toujours afficher les préfixes de nom de fichier en mode texte |
-n |
Afficher les numéros de ligne (par défaut : activé) |
-A N |
Afficher N lignes après chaque correspondance |
-B N |
Afficher N lignes avant chaque correspondance |
-C N |
Afficher N lignes de contexte avant et après chaque correspondance |
-m N |
Arrêter après N correspondances par fichier |
-j N |
Utiliser N processus de travail en parallèle |
-p PATTERN |
Motif de recherche AST |
-r TEMPLATE |
Modèle de réécriture AST (nécessite -p) |
--glob GLOB |
Inclure uniquement les fichiers dont le chemin correspond à GLOB |
--type NAME |
Inclure un alias de type de fichier (php, js, md, ...) |
--type-not NAME |
Exclure un alias de type de fichier |
--lang NAME |
Langage AST. Par défaut : php |
--json |
Émettre une sortie JSON |
--no-ignore |
Ignorer les règles .gitignore et .grephignore |
--hidden |
Inclure les fichiers masqués |
--dry-run |
Afficher les réécritures sans modifier les fichiers |
--interactive |
Confirmer chaque fichier réécrit |
--help |
Afficher l’aide en ligne |
greph-index
Index textuel préchauffé, index de faits AST et recherche AST mise en cache.
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...]
Index textuel
# 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
L’index textuel est un stockage préchauffé de trigrammes et de listes de références d’identifiants. Par défaut, il se trouve dans .greph-index/ à la racine indexée.
Ensembles d’index
Les ensembles d’index regroupent les flux de travail répétés sur plusieurs index dans un manifeste nommé :
./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)' .
Le fichier manifeste par défaut est .greph-index-set.json. Chaque entrée indique une racine, un mode et un profil de cycle de vie. set build et set refresh opèrent sur les entrées activées ; set search répartit la recherche sur les entrées sélectionnées et élimine les correspondances en double.
Index de faits AST
./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
L’index de faits AST extrait les faits au niveau des nœuds (appels, instanciations, classes, méthodes) dans un stockage interrogeable. Les recherches se font en O(log n) sur la clé de fait, puis sont vérifiées par rapport au code source. Par défaut, il est stocké dans .greph-ast-index/.
Cache AST
./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
Le cache AST stocke les arbres analysés sur disque afin que les recherches ignorent complètement l’analyseur. Par défaut, il est stocké dans .greph-ast-cache/.
Options
Les options de recherche textuelle correspondent à l’ensemble d’options greph (-F, -i, -w, -v, -c, -l, -L, -A, -B, -C, -m, --glob, --type, --type-not, --json, --no-ignore, --hidden).
Options supplémentaires :
| Option | Signification |
|---|---|
--index-dir DIR |
Utiliser un répertoire d’index préchauffé autre que celui par défaut. Répétable pour la recherche et les statistiques sur plusieurs index. |
--lifecycle PROFILE |
Politique de construction : static, manual-refresh, opportunistic-refresh, strict-stale-check |
--auto-refresh-max-files N |
Seuil de fichiers pour l’actualisation opportuniste |
--auto-refresh-max-bytes N |
Seuil d’octets pour l’actualisation opportuniste |
--manifest FILE |
Charger un manifeste d’ensemble d’index. Par défaut : .greph-index-set.json |
--mode MODE |
Limiter les opérations sur l’ensemble à text, ast-index ou ast-cache |
--index NAME |
Limiter les opérations sur l’ensemble à une entrée de manifeste nommée. Répétable. |
--show-index-origin |
Préfixer la sortie de recherche ou d’ensemble sur plusieurs index préchauffés par le nom de l’entrée d’index correspondante |
--trace-plan |
Émettre les diagnostics du planificateur préchauffé vers stderr |
--dry-refresh |
En stats, indiquer ce qu’effectuerait une recherche préchauffée sans rien modifier |
--lang NAME |
Langage AST pour les recherches ast-index / ast-cache. Par défaut : php |
-j N, --jobs N |
Processus de travail pour les analyses AST |
-l, --files-with-matches |
Lister uniquement les chemins des fichiers correspondants (mode AST) |
--strict-parse |
Échouer en cas d’erreur d’analyse au lieu de l’ignorer |
--fallback MODE |
Comportement en l’absence d’index : fail (par défaut) ou scan |
--help |
Afficher l’aide en ligne |
rg
Enveloppe de compatibilité de type ripgrep. Prend en charge les options ripgrep les plus couramment utilisées. Les fonctionnalités vérifiées sont publiées dans la matrice des fonctionnalités.
rg [options] pattern [path...]
rg --files [options] [path...]
Exemples
./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" .
Options prises en charge
| Option | Signification |
|---|---|
-F, --fixed-strings |
Recherche de chaînes exactes |
-i, --ignore-case |
Recherche sans distinction entre majuscules et minuscules |
-w, --word-regexp |
Recherche de mots entiers |
-v, --invert-match |
Inverser les correspondances |
-c, --count |
Compter les lignes correspondantes |
-l, --files-with-matches |
Lister les fichiers correspondants |
--files-without-match |
Lister les fichiers sans correspondance |
-I, --no-filename |
Supprimer les préfixes de nom de fichier |
-H, --with-filename |
Toujours afficher les préfixes de nom de fichier |
-n, --line-number |
Afficher les numéros de ligne |
-A N, --after-context N |
Afficher N lignes après chaque correspondance |
-B N, --before-context N |
Afficher N lignes avant chaque correspondance |
-C N, --context N |
Afficher N lignes avant et après chaque correspondance |
-m N, --max-count N |
Arrêter après N correspondances par fichier |
-j N, --threads N |
Utiliser N processus de travail en parallèle |
-e P, --regexp P |
Motif de recherche |
-L, --follow |
Suivre les liens symboliques |
--glob GLOB |
Inclure uniquement les fichiers dont le chemin correspond à GLOB |
--type NAME |
Inclure un type de fichier |
--type-not NAME |
Exclure un type de fichier |
--json |
Émettre des événements ripgrep de type JSON |
--no-ignore |
Ignorer les règles .gitignore et .grephignore |
--hidden |
Inclure les fichiers masqués |
--files |
Lister les fichiers candidats au lieu d’effectuer une recherche |
--help |
Afficher l’aide en ligne |
sg
Enveloppe de compatibilité de type ast-grep. Prend en charge les options ast-grep les plus couramment utilisées. Les fonctionnalités vérifiées sont publiées dans la matrice des fonctionnalités.
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]
run est la commande canonique de type ast-grep. scan et rewrite sont des alias réservés à l’enveloppe, qui reprennent les usages courants. Un appel sans argument (sg --pattern ... .) lance également une recherche ponctuelle.
Exemples
./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
Options prises en charge
| Option | Signification |
|---|---|
-p, --pattern PATTERN |
Motif AST |
-r, --rewrite TEMPLATE |
Modèle de réécriture |
-l, --lang NAME |
Langage AST. Par défaut : php |
-j, --threads N |
Utiliser N processus de travail en parallèle |
-i, --interactive |
Confirmer chaque réécriture |
-U, --update-all |
Appliquer les réécritures sans confirmation |
--files-with-matches |
Afficher uniquement les chemins des fichiers contenant des correspondances |
--json[=STYLE] |
Émettre une sortie JSON. STYLE = pretty, stream ou compact |
--no-ignore [MODE] |
Ignorer les règles d’exclusion du dépôt |
--hidden |
Inclure les fichiers masqués |
--glob GLOB, --globs GLOB |
Inclure uniquement les fichiers dont le chemin correspond à GLOB |
--type NAME |
Inclure un type de fichier |
--type-not NAME |
Exclure un type de fichier |
--dry-run |
Prévisualiser les réécritures sans modifier les fichiers |
--help |
Afficher l’aide en ligne |
Codes de sortie
Greph suit les conventions de grep / ripgrep :
| Code | Signification |
|---|---|
0 |
Au moins une correspondance a été trouvée (ou, pour les réécritures, au moins un fichier a été modifié) |
1 |
Aucune correspondance trouvée |
2 |
Erreur d’utilisation ou échec à l’exécution (arguments incorrects, index manquant, erreur d’analyse en mode --strict-parse) |