Funktionsmatris
Funktionsmatrisen är en genererad rapport som för varje flagga och beteende som stöds registrerar om det inbyggda verktyget och omslaget Greph ger likvärdiga utdata. Den är facit för frågor av typen ”har Greph stöd för detta?”.
Matrisen genereras på nytt från verkliga kommandoprobningar mot en deterministisk testmiljö. Råunderlaget finns i FEATURE_MATRIX.json och den återgivna tabellen finns i FEATURE_MATRIX.md.
Statusförklaring
| Status | Betydelse |
|---|---|
Pass |
Proben kördes och motsvarade det förväntade beteendet |
Fail |
Proben kördes men uppfyllde inte det förväntade beteendet |
Unavailable |
Leverantörskommandot fanns inte i den här miljön |
Avsnitt
Matrisen är indelad i sex avsnitt:
- rg-kompatibilitetsyta: varje probe körs både mot den uppströmsbaserade binärfilen
rgochbin/rg. Båda måstePassför att raden ska markeras som stödd. - sg-kompatibilitetsyta: varje probe körs både mot den uppströmsbaserade binärfilen
sgochbin/sg. Båda måstePassför att raden ska markeras som stödd. - Yta som bara finns i sg-omslaget: prober som endast riktar sig mot
bin/sg(funktioner som omslaget exponerar men som ast-grep självt saknar). - Inbyggd greph-yta: prober som testar
bin/grephdirekt. Det finns inget uppströmsverktyg att jämföra med; proberna kontrollerar det förväntade beteendet i testmiljön. - Indexerad greph-yta: prober som testar
bin/greph-index(bygge, uppdatering och uppvärmd textsökning). - Indexerad AST-biblioteksyta: prober som anropar PHP API (
Greph::buildAstIndex(),Greph::searchAstIndexed(),Greph::buildAstCache(),Greph::searchAstCached()) och kontrollerar bygge, sökning och uppdatering.
Skapa om matrisen
php bin/feature-matrix
Kör från en klon av repot med rg och sg på PATH; bin/feature-matrix ingår inte i paketet Composer. Skriptet bygger testmiljön, kör varje kompatibilitetsprobe mot den uppströmsbaserade binärfilen (om den är installerad) och omslaget Greph, registrerar det strukturerade resultatet och skriver både FEATURE_MATRIX.json och FEATURE_MATRIX.md. Ange --stdout för att skriva ut Markdown utan att skriva någon av filerna.
De incheckade filerna genereras om manuellt; CI genererar dem inte. Testsviten PHPUnit som CI kör innehåller ett test som skapar matrisen med uppströmsverktygen markerade som otillgängliga och kontrollerar rapportens struktur. Därför leder en enskild probe som börjar misslyckas inte till att CI misslyckas. Generera om matrisen och granska diffen före en version.
Vad som hör hemma i matrisen respektive dokumentationen
Referensen CLI och sidorna Kompatibilitet / rg samt Kompatibilitet / sg beskriver den avsedda funktionsytan. Funktionsmatrisen registrerar den verifierade funktionsytan, med de exakta probe-argumenten intill varje rad.
Om något är dokumenterat men saknas i matrisen är dokumentationen inaktuell. Om något finns i matrisen men inte är dokumenterat behöver dokumentationen kompletteras. De ska stämma överens.
Exempelrader
rg-kompatibilitet (utdrag)
| Funktion | rg | bin/rg | Anteckningar |
|---|---|---|---|
| Sökning med fast sträng | Godkänt | Godkänt | Probe: -F needle single.txt |
| Sökning med fast sträng utan hänsyn till skiftläge | Godkänt | Godkänt | Probe: -F -i needle single.txt |
| Helordsökning | Godkänt | Godkänt | Probe: -F -w needle words.txt |
| Globfilter | Godkänt | Godkänt | Probe: --glob *.php function . |
| Dolda filer | Godkänt | Godkänt | Probe: --hidden -F secret . |
| Strukturerad JSON-utdata | Godkänt | Godkänt | Probe: --json -F needle single.txt med händelsesemantik för ripgrep JSON |
sg-kompatibilitet (utdrag)
| Funktion | sg | bin/sg | Anteckningar |
|---|---|---|---|
Mönstersökning med run --pattern |
Godkänt | Godkänt | Probe: run --pattern array($$$ITEMS) src/App.php |
Omskrivning med run --rewrite |
Godkänt | Godkänt | Probe: run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] src/App.php |
| Strukturerad strömutdata JSON | Godkänt | Godkänt | Probe: run --json=stream --pattern dispatch($EVENT) src/App.php |
| Skriv om alla | Godkänt | Godkänt | Probe: run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] --update-all src/App.php |
För hela tabellen, se FEATURE_MATRIX.md.
Varför probstyrt
En kompatibilitetstabell som underhålls för hand blir inaktuell. Hela poängen med omslagen är att ”ersätta anropen till rg eller sg med dem och fortsätta arbeta som vanligt”. Det enda sättet att hålla det löftet är att faktiskt köra uppströmsverktyget och omslaget sida vid sida och jämföra resultaten. Proberunnern gör just det varje gång matrisen genereras om.