Zum Inhalt springen

rg-Kompatibilität

vendor/bin/rg ist ein Kompatibilitätswrapper im Stil von ripgrep. Er akzeptiert die am häufigsten verwendeten ripgrep-Optionen, durchläuft den Dateibaum wie ripgrep und gibt passende Ergebnisse aus. Die geprüfte Funktionsabdeckung wurde anhand von Testläufen mit der Upstream-Binärdatei rg ermittelt und ist unter Erweitert / Funktionsmatrix dokumentiert.

Der Wrapper übersetzt CLI-Optionen direkt; die Suche selbst erledigt dieselbe Engine Greph\Text\TextSearcher, die auch vendor/bin/greph verwendet.

Wann du ihn verwenden solltest

Verwende den Wrapper, wenn:

  • Du bereits ein Tool, einen Agenten oder ein Skript hast, das rg aufruft.
  • Du einen direkten Ersatz suchst, der auch in Umgebungen funktioniert, in denen du ripgrep selbst nicht installieren kannst (Shared Hosting, gehärtete Container, eingeschränkte PaaS).
  • Du die Bedienung von ripgrep auf einer Infrastruktur nutzen möchtest, auf der nur PHP verfügbar ist.

Verwende das native vendor/bin/greph, wenn:

  • Du neuen Code schreibst und nicht die ripgrep-Form CLI benötigst.
  • Du Zugriff auf native Optionen möchtest, die der Wrapper nicht bereitstellt (zum Beispiel den AST-Modus).

Verwendung

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

Ein Aufruf ohne Argumente durchsucht . rekursiv:

Shell
./vendor/bin/rg -F "function"

--files listet mögliche Dateien auf, statt sie zu durchsuchen:

Shell
./vendor/bin/rg --files
./vendor/bin/rg --files --type php
./vendor/bin/rg --files --hidden

JSON-Ausgabe

--json gibt dieselben ereignisartigen Nutzdaten aus wie ripgrep:

Shell
./vendor/bin/rg --json -F "function walk" src/Greph.php
JSON
{"type":"begin","data":{"path":{"text":"src/Greph.php"}}}
{"type":"match","data":{"path":{"text":"src/Greph.php"},"lines":{"text":"    public static function walk(string|array $paths, ?WalkOptions $options = null): FileList\n"},"line_number":41,"absolute_offset":1034,"submatches":[{"match":{"text":"function walk"},"start":18,"end":31}]}}
{"type":"end","data":{"path":{"text":"src/Greph.php"},"binary_offset":null,"stats":{"elapsed":{"secs":0,"nanos":0,"human":"0.000000s"},"searches":1,"searches_with_match":1,"bytes_searched":13383,"bytes_printed":282,"matched_lines":1,"matches":1}}}
{"type":"summary","data":{"elapsed_total":{"human":"0.000000s","nanos":0,"secs":0},"stats":{"bytes_printed":282,"bytes_searched":13383,"matched_lines":1,"matches":1,"searches":1,"searches_with_match":1,"elapsed":{"human":"0.000000s","nanos":0,"secs":0}}}}

Zeitangaben in den stats-Objekten werden immer als null ausgegeben.

Dieses Schema erwarten nachgelagerte Tools, wenn sie die strukturierte Ausgabe von ripgrep aktivieren. Wenn du ein einfacheres Format möchtest, verwende stattdessen vendor/bin/greph --json.

Geprüfte Funktionsabdeckung

Die folgenden Optionen wurden anhand von rg selbst in der Funktionsmatrix überprüft. Upstream-Binärdatei und Wrapper erzeugen bei jeder Prüfung gleichwertige Ausgaben. Hat eine Option eine Kurz- und Langform, verwendet die Prüfung eine davon; der Wrapper verarbeitet beide als dieselbe Option.

Suchoptionen

  • -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
  • -B N, --before-context N
  • -C N, --context N
  • -m N, --max-count N
  • -e P, --regexp P

Optionen für den Dateibaum

  • -L, --follow
  • --glob GLOB
  • --type NAME
  • --type-not NAME
  • --no-ignore
  • --hidden
  • --files
  • --files --hidden
  • --files --type NAME

Ausgabeoptionen

  • --json

Ohne Prüfung akzeptiert

Der Wrapper akzeptiert außerdem die folgenden Optionen, die bisher jedoch nicht durch eine Prüfung in der Funktionsmatrix abgedeckt sind:

  • -j N, --threads N (Anzahl der Worker, siehe Parallele Worker)
  • -q, --quiet
  • --no-follow

Einschränkungen

Der rg-Wrapper von Greph deckt die Such- und Dateibaumoptionen ab, die von den meisten Tools und Agenten verwendet werden. Die folgenden ripgrep-Funktionen stellt er derzeit nicht bereit:

  • Mehrzeilige Regexe (-U, --multiline)
  • Ersetzungen (-r, --replace) im Textmodus (verwende stattdessen vendor/bin/greph für AST-Umschreibungen)
  • Benutzerdefinierte Typdefinitionen (--type-add, --type-clear)
  • Optionen für die Zeichenkodierung (-E, --encoding)
  • --pre-Filterskripte
  • --sort, --sortr

Wenn dir eine fehlende Option auffällt, erstelle ein Issue mit der Prüfung, die du gegen Upstream-rg ausgeführt hast, und der erwarteten Ausgabe. Neue Funktionen werden zusammen mit ihren Referenzprüfungen hinzugefügt, sodass die geprüfte Funktionsabdeckung stetig wächst.

Verhaltensgleichheit

Der Wrapper zielt auf Verhaltensgleichheit, nicht auf Byte-Gleichheit. Die Ausgabe ist zeilenweise gleichwertig, kann sich aber in optischen Details unterscheiden (Farbcodes, Kürzung an der Terminalbreite). Die Prüfungen der Funktionsmatrix kontrollieren die semantische Gleichwertigkeit, nicht bytegenaue Unterschiede.

Für Agenten und Tools, die die Ausgabe parsen, sind die relevanten Felder (Dateipfad, Zeilennummer, Inhalt, Position der Übereinstimmung) bei jeder geprüften Prüfung byteidentisch mit Upstream-rg.