Μετάβαση στο περιεχόμενο

Αναφορά CLI

Το Greph περιλαμβάνει τέσσερα εκτελέσιμα. Και τα τέσσερα χρησιμοποιούν τον ίδιο μηχανισμό· διαφέρουν ως προς το περιβάλλον χρήσης που παρέχουν.

Εκτελέσιμο Σκοπός
greph Εγγενής αναζήτηση κειμένου, αναζήτηση AST και αναδιατύπωση AST
greph-index Προθερμασμένο ευρετήριο κειμένου, ευρετήριο δεδομένων AST και προσωρινά αποθηκευμένη αναζήτηση AST
rg Επίπεδο συμβατότητας τύπου ripgrep
sg Επίπεδο συμβατότητας τύπου ast-grep

Όλες οι διαδρομές στα παραδείγματα χρησιμοποιούν το ./vendor/bin/<binary>, το οποίο λειτουργεί με το Greph 0.2.3 ή νεότερη έκδοση εγκατεστημένη ως εξάρτηση. Αντικαταστήστε με ./bin/<binary> αν εργάζεστε από κλώνο του αποθετηρίου.


greph

Εγγενής αναζήτηση κειμένου, αναζήτηση AST και αναδιατύπωση AST.

Κέλυφος
greph [options] pattern [path...]
greph -p pattern [options] [path...]
greph -p pattern -r replacement [options] [path...]

Αν παραλειφθεί η διαδρομή, γίνεται αναζήτηση στον τρέχοντα κατάλογο.

Λειτουργία κειμένου

Προεπιλεγμένη λειτουργία. Τα μοτίβα είναι κανονικές εκφράσεις PCRE2, εκτός αν έχει οριστεί το -F.

Κέλυφος
# 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

Η μορφή εξόδου αντιστοιχεί στο grep -rn:

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

Λειτουργία AST

Ενεργοποιείται με το -p. Τα μοτίβα γράφονται ως συνηθισμένο PHP με μεταβλητές μετα-επιπέδου $VAR και $$$VARIADIC. Δείτε την ενότητα Λειτουργίες / Αναζήτηση AST για την πλήρη γραμματική μοτίβων.

Κέλυφος
./vendor/bin/greph -p 'new $CLASS()' src
./vendor/bin/greph -p '$obj->$method($$$ARGS)' src
./vendor/bin/greph -p 'function $name($$$PARAMS): void {}' src

Λειτουργία αναδιατύπωσης

Ενεργοποιείται συνδυάζοντας το -p με το -r. Το πρότυπο αντικατάστασης χρησιμοποιεί τις ίδιες μεταβλητές μετα-επιπέδου με το μοτίβο αναζήτησης· οι κόμβοι που καταγράφηκαν εισάγονται με βάση το όνομά τους.

Κέλυφος
# 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

Επιλογές

Σημαία Σημασία
-F Αναζήτηση σταθερής συμβολοσειράς (χωρίς κανονική έκφραση)
-i Αντιστοίχιση χωρίς διάκριση πεζών-κεφαλαίων
-w Αντιστοίχιση ολόκληρης λέξης
-v Αντιστροφή αντιστοίχισης
-c Καταμέτρηση αντιστοιχίσεων ανά αρχείο
-l Εμφάνιση μόνο των διαδρομών αρχείων με αντιστοιχίσεις
-L Εμφάνιση μόνο των διαδρομών αρχείων χωρίς αντιστοιχίσεις
-h Απόκρυψη προθεμάτων ονομάτων αρχείων στη λειτουργία κειμένου
-H Πάντα εμφάνιση προθεμάτων ονομάτων αρχείων στη λειτουργία κειμένου
-n Εμφάνιση αριθμών γραμμών (προεπιλογή: ενεργή)
-A N Εμφάνιση N γραμμών μετά από κάθε αντιστοίχιση
-B N Εμφάνιση N γραμμών πριν από κάθε αντιστοίχιση
-C N Εμφάνιση N γραμμών περιβάλλοντος πριν και μετά από κάθε αντιστοίχιση
-m N Διακοπή μετά από N αντιστοιχίσεις ανά αρχείο
-j N Χρήση N παράλληλων εργατών
-p PATTERN Μοτίβο αναζήτησης AST
-r TEMPLATE Πρότυπο αναδιατύπωσης AST (απαιτεί το -p)
--glob GLOB Συμπερίληψη μόνο αρχείων των οποίων οι διαδρομές αντιστοιχούν στο GLOB
--type NAME Συμπερίληψη ψευδωνύμου τύπου αρχείου (php, js, md, ...)
--type-not NAME Εξαίρεση ψευδωνύμου τύπου αρχείου
--lang NAME Γλώσσα AST. Προεπιλογή: php
--json Παραγωγή εξόδου JSON
--no-ignore Παράβλεψη κανόνων .gitignore και .grephignore
--hidden Συμπερίληψη κρυφών αρχείων
--dry-run Εμφάνιση αναδιατυπώσεων χωρίς εγγραφή στα αρχεία
--interactive Επιβεβαίωση κάθε αρχείου που αναδιατυπώνεται
--help Εμφάνιση σύντομης χρήσης

greph-index

Προθερμασμένο ευρετήριο κειμένου, ευρετήριο δεδομένων AST και προσωρινά αποθηκευμένη αναζήτηση AST.

Κέλυφος
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...]

Ευρετήριο κειμένου

Κέλυφος
# 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

Το ευρετήριο κειμένου είναι ένας προθερμασμένος χώρος αποθήκευσης τριγραμμάτων και καταχωρίσεων αναγνωριστικών. Από προεπιλογή, βρίσκεται στο .greph-index/ στη ριζική διαδρομή με ευρετήριο.

Σύνολα ευρετηρίων

Τα σύνολα ευρετηρίων μετατρέπουν τις επαναλαμβανόμενες ροές εργασίας πολλαπλών ευρετηρίων σε ένα ονομαστικό μανιφέστο:

Κέλυφος
./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)' .

Το προεπιλεγμένο αρχείο μανιφέστου είναι το .greph-index-set.json. Κάθε καταχώριση παραπέμπει σε μια ριζική διαδρομή, μια λειτουργία και ένα προφίλ κύκλου ζωής. Τα set build και set refresh λειτουργούν στις ενεργοποιημένες καταχωρίσεις· το set search εκτελείται σε όλες τις επιλεγμένες καταχωρίσεις και αφαιρεί τις διπλότυπες επικαλυπτόμενες αντιστοιχίσεις.

Ευρετήριο δεδομένων 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

Το ευρετήριο δεδομένων AST εξάγει δεδομένα σε επίπεδο κόμβου (κλήσεις, στιγμιοτυπήσεις, κλάσεις, μέθοδοι) σε έναν χώρο αποθήκευσης με δυνατότητα αναζήτησης. Οι αναζητήσεις γίνονται με O(log n) στο κλειδί δεδομένων και κατόπιν επαληθεύονται με βάση τον πηγαίο κώδικα. Από προεπιλογή, αποθηκεύεται στο .greph-ast-index/.

Προσωρινή μνήμη 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

Η προσωρινή μνήμη AST αποθηκεύει αναλυμένα δέντρα στον δίσκο, ώστε οι αναζητήσεις να παρακάμπτουν πλήρως τον αναλυτή. Από προεπιλογή, αποθηκεύεται στο .greph-ast-cache/.

Επιλογές

Οι επιλογές αναζήτησης κειμένου αντιστοιχούν στο σύνολο σημαιών greph (-F, -i, -w, -v, -c, -l, -L, -A, -B, -C, -m, --glob, --type, --type-not, --json, --no-ignore, --hidden).

Πρόσθετες σημαίες:

Σημαία Σημασία
--index-dir DIR Χρήση μη προεπιλεγμένου καταλόγου προθερμασμένου ευρετηρίου. Επαναλαμβάνεται για αναζήτηση και στατιστικά πολλαπλών ευρετηρίων.
--lifecycle PROFILE Πολιτική δημιουργίας: static, manual-refresh, opportunistic-refresh, strict-stale-check
--auto-refresh-max-files N Όριο αρχείων για ευκαιριακή ανανέωση
--auto-refresh-max-bytes N Όριο byte για ευκαιριακή ανανέωση
--manifest FILE Φόρτωση μανιφέστου συνόλου ευρετηρίων. Προεπιλογή: .greph-index-set.json
--mode MODE Περιορισμός λειτουργιών συνόλου στα text, ast-index ή ast-cache
--index NAME Περιορισμός λειτουργιών συνόλου σε ονομαστική καταχώριση μανιφέστου. Επαναλαμβάνεται.
--show-index-origin Πρόταξη του ονόματος της αντίστοιχης καταχώρισης ευρετηρίου στην έξοδο πολλαπλών ευρετηρίων ή συνόλων με προθέρμανση
--trace-plan Παραγωγή διαγνωστικών του προγραμματιστή με προθέρμανση στο stderr
--dry-refresh Στο stats, αναφορά της συμπεριφοράς μιας αναζήτησης με προθέρμανση χωρίς να τροποποιηθεί τίποτα
--lang NAME Γλώσσα AST για αναζητήσεις ast-index / ast-cache. Προεπιλογή: php
-j N, --jobs N Εργάτες για σαρώσεις AST
-l, --files-with-matches Εμφάνιση μόνο των διαδρομών αρχείων με αντιστοιχίσεις (λειτουργία AST)
--strict-parse Αποτυχία σε σφάλματα ανάλυσης αντί για παράλειψή τους
--fallback MODE Συμπεριφορά όταν λείπει ευρετήριο: fail (προεπιλογή) ή scan
--help Εμφάνιση σύντομης χρήσης

rg

Επίπεδο συμβατότητας τύπου ripgrep. Υποστηρίζει τις συνηθέστερες σημαίες ripgrep. Η επαληθευμένη επιφάνεια τεκμηριώνεται στον πίνακα δυνατοτήτων.

Κέλυφος
rg [options] pattern [path...]
rg --files [options] [path...]

Παραδείγματα

Κέλυφος
./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" .

Υποστηριζόμενες επιλογές

Σημαία Σημασία
-F, --fixed-strings Αναζήτηση σταθερής συμβολοσειράς
-i, --ignore-case Αναζήτηση χωρίς διάκριση πεζών-κεφαλαίων
-w, --word-regexp Αναζήτηση ολόκληρης λέξης
-v, --invert-match Αντιστροφή αντιστοιχίσεων
-c, --count Καταμέτρηση γραμμών με αντιστοιχίσεις
-l, --files-with-matches Εμφάνιση αρχείων με αντιστοιχίσεις
--files-without-match Εμφάνιση αρχείων χωρίς αντιστοιχίσεις
-I, --no-filename Απόκρυψη προθεμάτων ονομάτων αρχείων
-H, --with-filename Πάντα εμφάνιση προθεμάτων ονομάτων αρχείων
-n, --line-number Εμφάνιση αριθμών γραμμών
-A N, --after-context N Εμφάνιση N γραμμών μετά από κάθε αντιστοίχιση
-B N, --before-context N Εμφάνιση N γραμμών πριν από κάθε αντιστοίχιση
-C N, --context N Εμφάνιση N γραμμών πριν και μετά από κάθε αντιστοίχιση
-m N, --max-count N Διακοπή μετά από N αντιστοιχίσεις ανά αρχείο
-j N, --threads N Χρήση N παράλληλων εργατών
-e P, --regexp P Μοτίβο αναζήτησης
-L, --follow Ακολούθηση συμβολικών συνδέσμων
--glob GLOB Συμπερίληψη μόνο αρχείων των οποίων οι διαδρομές αντιστοιχούν στο GLOB
--type NAME Συμπερίληψη τύπου αρχείου
--type-not NAME Εξαίρεση τύπου αρχείου
--json Παραγωγή συμβάντων ripgrep τύπου JSON
--no-ignore Παράβλεψη κανόνων .gitignore και .grephignore
--hidden Συμπερίληψη κρυφών αρχείων
--files Εμφάνιση υποψήφιων αρχείων αντί για αναζήτηση
--help Εμφάνιση σύντομης χρήσης

sg

Επίπεδο συμβατότητας τύπου ast-grep. Υποστηρίζει τις συνηθέστερες σημαίες ast-grep. Η επαληθευμένη επιφάνεια τεκμηριώνεται στον πίνακα δυνατοτήτων.

Κέλυφος
sg run --pattern PATTERN [options] [path...]
sg scan -p PATTERN [options] [path...]
sg rewrite -p PATTERN -r TEMPLATE [options] [path...]

Το run είναι η κανονική εντολή ast-grep. Τα scan και rewrite είναι ψευδώνυμα μόνο του περιτυλίγματος που αντιστοιχούν στη συνήθη χρήση. Λειτουργεί και η απλή κλήση (sg --pattern ... .) για αναζήτηση μίας φοράς.

Παραδείγματα

Κέλυφος
./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

Υποστηριζόμενες επιλογές

Σημαία Σημασία
-p, --pattern PATTERN Μοτίβο AST
-r, --rewrite TEMPLATE Πρότυπο αναδιατύπωσης
-l, --lang NAME Γλώσσα AST. Προεπιλογή: php
-j, --threads N Χρήση N παράλληλων εργατών
-i, --interactive Επιβεβαίωση κάθε αναδιατύπωσης
-U, --update-all Εφαρμογή αναδιατυπώσεων χωρίς επιβεβαίωση
--files-with-matches Εμφάνιση μόνο διαδρομών αρχείων με αντιστοιχίσεις
--json[=STYLE] Παραγωγή εξόδου JSON. STYLE = pretty, stream ή compact
--no-ignore [MODE] Παράβλεψη κανόνων αγνόησης του αποθετηρίου
--hidden Συμπερίληψη κρυφών αρχείων
--glob GLOB, --globs GLOB Συμπερίληψη μόνο αρχείων των οποίων οι διαδρομές αντιστοιχούν στο GLOB
--type NAME Συμπερίληψη τύπου αρχείου
--type-not NAME Εξαίρεση τύπου αρχείου
--dry-run Προεπισκόπηση αναδιατυπώσεων χωρίς εγγραφή στα αρχεία
--help Εμφάνιση σύντομης χρήσης

Κωδικοί εξόδου

Το Greph ακολουθεί τις συμβάσεις των grep / ripgrep:

Κωδικός Σημασία
0 Βρέθηκε τουλάχιστον μία αντιστοίχιση (ή, στις αναδιατυπώσεις, άλλαξε τουλάχιστον ένα αρχείο)
1 Δεν βρέθηκαν αντιστοιχίσεις
2 Σφάλμα χρήσης ή αποτυχία εκτέλεσης (λανθασμένα ορίσματα, ευρετήριο που λείπει, σφάλμα ανάλυσης στη λειτουργία --strict-parse)