Feature-Matrix
Die Feature-Matrix ist ein generierter Bericht, der für jedes unterstützte Flag und Verhalten festhält, ob das native Tool und der Greph-Wrapper eine gleichwertige Ausgabe erzeugen. Sie ist maßgeblich für die Frage: „Wird das von Greph unterstützt?“
Die Matrix wird anhand echter Befehlsprüfungen in einem deterministischen Fixture-Arbeitsbereich neu generiert. Die Rohdaten liegen unter FEATURE_MATRIX.json, die formatierte Tabelle unter FEATURE_MATRIX.md.
Statuslegende
| Status | Bedeutung |
|---|---|
Pass |
Die Prüfung wurde ausgeführt und entsprach dem erwarteten Verhalten |
Fail |
Die Prüfung wurde ausgeführt, erfüllte aber nicht die erwarteten Anforderungen |
Unavailable |
Der Anbieterbefehl war in dieser Umgebung nicht vorhanden |
Abschnitte
Die Matrix ist in sechs Abschnitte gegliedert:
- rg-Kompatibilitätsoberfläche: Jede Prüfung wird sowohl mit der vorgelagerten
rg-Binärdatei als auch mitbin/rgausgeführt. Beide müssenPass, damit die Zeile als unterstützt markiert wird. - sg-Kompatibilitätsoberfläche: Jede Prüfung wird sowohl mit der vorgelagerten
sg-Binärdatei als auch mitbin/sgausgeführt. Beide müssenPass, damit die Zeile als unterstützt markiert wird. - Nur vom sg-Wrapper unterstützte Funktionen: Prüfungen, die sich ausschließlich auf
bin/sgbeziehen (zusätzliche Funktionen des Wrappers, die ast-grep selbst nicht bietet). - Native greph-Oberfläche: Prüfungen, die
bin/grephdirekt ausführen. Es gibt kein vorgelagertes Tool für einen Vergleich; die Prüfungen bestätigen das erwartete Verhalten im Fixture-Arbeitsbereich. - Indexierte greph-Oberfläche: Prüfungen, die
bin/greph-indexausführen (Erstellung, Aktualisierung und aufgewärmte Textsuche). - Indexierte AST-Bibliotheksoberfläche: Prüfungen, die PHP API aufrufen (
Greph::buildAstIndex(),Greph::searchAstIndexed(),Greph::buildAstCache(),Greph::searchAstCached()) und Erstellung, Suche sowie Aktualisierung überprüfen.
Matrix neu generieren
php bin/feature-matrix
Führe das Skript in einem geklonten Repository mit rg und sg auf dem PATH aus; bin/feature-matrix ist nicht Teil des Composer-Pakets. Es erstellt den Fixture-Arbeitsbereich, führt jede Kompatibilitätsprüfung mit der vorgelagerten Binärdatei aus (falls installiert) sowie mit dem Greph-Wrapper, erfasst das strukturierte Ergebnis und schreibt sowohl FEATURE_MATRIX.json als auch FEATURE_MATRIX.md. Übergib --stdout, um die Markdown auszugeben, ohne eine der beiden Dateien zu schreiben.
Die eingecheckten Dateien werden manuell neu generiert; CI generiert sie nicht. Die von CI ausgeführte PHPUnit-Suite enthält einen Test, der die Matrix mit als nicht verfügbar markierten Upstream-Tools erstellt und die Struktur des Berichts überprüft. So lässt eine einzelne fehlschlagende Prüfung CI nicht fehlschlagen. Generiere die Matrix vor einer Veröffentlichung neu und überprüfe die Änderungen.
Was in die Matrix und was in die Dokumentation gehört
Die CLI-Referenz und die Seiten Kompatibilität / rg sowie Kompatibilität / sg beschreiben den beabsichtigten Funktionsumfang. Die Feature-Matrix dokumentiert den überprüften Umfang und führt neben jeder Zeile die genauen Argumente der Prüfung auf.
Wenn etwas dokumentiert, aber nicht in der Matrix enthalten ist, ist die Dokumentation veraltet. Wenn etwas in der Matrix steht, aber nicht dokumentiert ist, muss die Dokumentation ergänzt werden. Beides sollte übereinstimmen.
Beispielzeilen
rg-Kompatibilität (Auszug)
| Funktion | rg | bin/rg | Hinweise |
|---|---|---|---|
| Feststringsuche | Bestanden | Bestanden | Prüfung: -F needle single.txt |
| Groß- und Kleinschreibung bei Feststringsuche ignorieren | Bestanden | Bestanden | Prüfung: -F -i needle single.txt |
| Suche nach ganzen Wörtern | Bestanden | Bestanden | Prüfung: -F -w needle words.txt |
| Glob-Filter | Bestanden | Bestanden | Prüfung: --glob *.php function . |
| Versteckte Dateien | Bestanden | Bestanden | Prüfung: --hidden -F secret . |
| Strukturierte JSON-Ausgabe | Bestanden | Bestanden | Prüfung: --json -F needle single.txt mit ripgrep-JSON-Ereignissemantik |
sg-Kompatibilität (Auszug)
| Funktion | sg | bin/sg | Hinweise |
|---|---|---|---|
Mustersuche mit run --pattern |
Bestanden | Bestanden | Prüfung: run --pattern array($$$ITEMS) src/App.php |
Umschreiben mit run --rewrite |
Bestanden | Bestanden | Prüfung: run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] src/App.php |
| Strukturierte JSON-Stream-Ausgabe | Bestanden | Bestanden | Prüfung: run --json=stream --pattern dispatch($EVENT) src/App.php |
| Alles umschreiben | Bestanden | Bestanden | Prüfung: run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] --update-all src/App.php |
Die vollständige Tabelle findest du unter FEATURE_MATRIX.md.
Warum Prüfungen die Grundlage bilden
Eine manuell gepflegte Kompatibilitätstabelle veraltet mit der Zeit. Der ganze Zweck der Wrapper besteht darin, sie dort einzusetzen, wo du zuvor rg oder sg aufgerufen hast, und damit alles weiterhin funktioniert. Dieses Versprechen lässt sich nur einhalten, indem man das Upstream-Tool und den Wrapper tatsächlich nebeneinander ausführt und die Ergebnisse vergleicht. Genau das macht der Prüfungs-Runner bei jeder Neugenerierung der Matrix.