Functiematrix
De functiematrix is een gegenereerd rapport dat voor elke ondersteunde vlag en elk gedrag vastlegt of de native tool en de Greph-wrapper gelijkwaardige uitvoer produceren. Dit is de bron van waarheid voor vragen als 'ondersteunt Greph dit?'.
De matrix wordt opnieuw gegenereerd met echte opdrachtprobes in een deterministische fixturewerkruimte. Het ruwe bewijsmateriaal staat in FEATURE_MATRIX.json en de weergegeven tabel staat in FEATURE_MATRIX.md.
Statuslegenda
| Status | Betekenis |
|---|---|
Pass |
De probe is uitgevoerd en kwam overeen met het verwachte gedrag |
Fail |
De probe is uitgevoerd, maar voldeed niet aan het verwachte gedrag |
Unavailable |
De provideropdracht was niet beschikbaar in deze omgeving |
Secties
De matrix is ingedeeld in zes secties:
- rg-compatibiliteitsoppervlak: elke probe wordt uitgevoerd met zowel de upstream-
rg-binary alsbin/rg. Beide moetenPassom de rij als ondersteund te markeren. - sg-compatibiliteitsoppervlak: elke probe wordt uitgevoerd met zowel de upstream-
sg-binary alsbin/sg. Beide moetenPassom de rij als ondersteund te markeren. - Alleen de sg-wrapper: probes die alleen
bin/sgtesten (extra's die de wrapper aanbiedt, maar die ast-grep zelf niet heeft). - Native greph-oppervlak: probes die
bin/grephrechtstreeks testen. Er is geen upstream-tool om mee te vergelijken; de probes controleren het verwachte gedrag in de fixturewerkruimte. - Geïndexeerd greph-oppervlak: probes die
bin/greph-indextesten (build, vernieuwing en opgewarmd zoeken in tekst). - Oppervlak van de geïndexeerde AST-bibliotheek: probes die PHP API aanroepen (
Greph::buildAstIndex(),Greph::searchAstIndexed(),Greph::buildAstCache(),Greph::searchAstCached()) en build, zoeken en vernieuwing controleren.
De matrix opnieuw genereren
php bin/feature-matrix
Voer dit uit vanuit een kloon van de repository met rg en sg op de PATH; bin/feature-matrix maakt geen deel uit van het Composer-pakket. Het bouwt de fixturewerkruimte, voert elke compatibiliteitsprobe uit met de upstream-binary (indien geïnstalleerd) en de Greph-wrapper, legt het gestructureerde resultaat vast en schrijft zowel FEATURE_MATRIX.json als FEATURE_MATRIX.md. Geef --stdout mee om de Markdown weer te geven zonder een van beide bestanden te schrijven.
De gecommitte bestanden worden handmatig opnieuw gegenereerd; CI doet dit niet. De PHPUnit-suite die CI uitvoert, bevat een test die de matrix genereert terwijl de upstream-tools als niet beschikbaar zijn gemarkeerd en de structuur van het rapport controleert. Daardoor laat één probe die begint te falen CI niet mislukken. Genereer de matrix opnieuw en controleer de diff vóór een release.
Wat in de matrix staat en wat in de documentatie
De CLI-referentie en de pagina's Compatibiliteit / rg en Compatibiliteit / sg beschrijven het beoogde aanbod. De functiematrix legt het geverifieerde aanbod vast, met de exacte probe-argumenten bij elke rij.
Als iets wel is gedocumenteerd maar niet in de matrix staat, is de documentatie verouderd. Staat iets wel in de matrix maar niet in de documentatie, dan moet de documentatie worden aangevuld. Beide moeten overeenkomen.
Voorbeeldrijen
rg-compatibiliteit (fragment)
| Functie | rg | bin/rg | Opmerkingen |
|---|---|---|---|
| Zoeken naar een vaste tekenreeks | Geslaagd | Geslaagd | Probe: -F needle single.txt |
| Zoeken naar een vaste tekenreeks zonder onderscheid tussen hoofdletters en kleine letters | Geslaagd | Geslaagd | Probe: -F -i needle single.txt |
| Zoeken naar hele woorden | Geslaagd | Geslaagd | Probe: -F -w needle words.txt |
| Glob-filter | Geslaagd | Geslaagd | Probe: --glob *.php function . |
| Verborgen bestanden | Geslaagd | Geslaagd | Probe: --hidden -F secret . |
| Gestructureerde JSON-uitvoer | Geslaagd | Geslaagd | Probe: --json -F needle single.txt met gebeurtenissemantiek van ripgrep JSON |
sg-compatibiliteit (fragment)
| Functie | sg | bin/sg | Opmerkingen |
|---|---|---|---|
Patronen zoeken met run --pattern |
Geslaagd | Geslaagd | Probe: run --pattern array($$$ITEMS) src/App.php |
Herschrijven via run --rewrite |
Geslaagd | Geslaagd | Probe: run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] src/App.php |
| Gestructureerde JSON-streamuitvoer | Geslaagd | Geslaagd | Probe: run --json=stream --pattern dispatch($EVENT) src/App.php |
| Alles herschrijven | Geslaagd | Geslaagd | Probe: run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] --update-all src/App.php |
Zie voor de volledige tabel FEATURE_MATRIX.md.
Waarom probes gebruiken
Een compatibiliteitstabel die handmatig wordt bijgehouden, raakt achterhaald. Het hele idee achter de wrappers is: 'vervang de plek waar u vroeger rg of sg aanriep en ze blijven werken'. De enige manier om die belofte waar te maken, is de upstream-tool en de wrapper naast elkaar uit te voeren en de resultaten te vergelijken. De probetest doet dat telkens wanneer de matrix opnieuw wordt gegenereerd.