
# Αναφορά 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.

```bash
greph [options] pattern [path...]
greph -p pattern [options] [path...]
greph -p pattern -r replacement [options] [path...]
```

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

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

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

```bash
# 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](https://greph.inline0.dev/el/docs/modes/ast) για την πλήρη γραμματική μοτίβων.

```bash
./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`. Το πρότυπο αντικατάστασης χρησιμοποιεί τις ίδιες μεταβλητές μετα-επιπέδου με το μοτίβο αναζήτησης· οι κόμβοι που καταγράφηκαν εισάγονται με βάση το όνομά τους.

```bash
# 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.

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

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

```bash
# 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/` στη ριζική διαδρομή με ευρετήριο.

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

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

```bash
./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

```bash
./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

```bash
./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. Η επαληθευμένη επιφάνεια τεκμηριώνεται στον [πίνακα δυνατοτήτων](https://greph.inline0.dev/el/docs/advanced/feature-matrix).

```bash
rg [options] pattern [path...]
rg --files [options] [path...]
```

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

```bash
./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. Η επαληθευμένη επιφάνεια τεκμηριώνεται στον [πίνακα δυνατοτήτων](https://greph.inline0.dev/el/docs/advanced/feature-matrix).

```bash
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 ... .`) για αναζήτηση μίας φοράς.

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

```bash
./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`) |
