Matrika funkcij
Matrika funkcij je ustvarjeno poročilo, ki za vsako podprto zastavico in vedenje beleži, ali izvorno orodje in ovojnica Greph ustvarita enakovreden izhod. Je merodajni vir za vprašanja »Ali Greph to podpira?«.
Matrika se znova ustvari na podlagi dejanskih preizkusov ukazov v determinističnem navideznem delovnem prostoru. Surovi dokazi so v FEATURE_MATRIX.json, upodobljena tabela pa v FEATURE_MATRIX.md.
Legenda stanj
| Stanje | Pomen |
|---|---|
Pass |
Preizkus se je izvedel in ustrezal pričakovanemu vedenju |
Fail |
Preizkus se je izvedel, vendar ni ustrezal pričakovanemu vedenju |
Unavailable |
Ukaz ponudnika v tem okolju ni bil na voljo |
Razdelki
Matrika je razdeljena na šest razdelkov:
- Površina združljivosti rg: vsak preizkus se izvede tako z izvorno binarno datoteko
rgkot zbin/rg. Obe orodji morataPass, da je vrstica označena kot podprta. - Površina združljivosti sg: vsak preizkus se izvede tako z izvorno binarno datoteko
sgkot zbin/sg. Obe orodji morataPass, da je vrstica označena kot podprta. - Površina samo ovojnice sg: preizkusi, ki ciljajo samo na
bin/sg(dodatne funkcije, ki jih izpostavlja ovojnica, ast-grep pa jih sam nima). - Izvorna površina greph: preizkusi, ki neposredno preverjajo
bin/greph. Ni izvornega orodja za primerjavo; preizkusi preverjajo pričakovano vedenje v navideznem delovnem prostoru. - Indeksirana površina greph: preizkusi, ki preverjajo
bin/greph-index(gradnjo, osveževanje in ogreto iskanje besedila). - Površina indeksirane knjižnice AST: preizkusi, ki kličejo PHP API (
Greph::buildAstIndex(),Greph::searchAstIndexed(),Greph::buildAstCache(),Greph::searchAstCached()) ter preverjajo gradnjo, iskanje in osveževanje.
Ponovno ustvarjanje matrike
php bin/feature-matrix
Zaženite ga iz klona repozitorija z rg in sg v PATH; bin/feature-matrix ni del paketa Composer. Zgradi navidezni delovni prostor, izvede vsak preizkus združljivosti z izvorno binarno datoteko (če je nameščena) in ovojnico Greph, zabeleži strukturiran rezultat ter zapiše datoteki FEATURE_MATRIX.json in FEATURE_MATRIX.md. Z argumentom --stdout izpišite Markdown, ne da bi zapisali katero koli datoteko.
Zavezanih datotek ne ustvarja CI, temveč se ustvarijo ročno. Zbirka PHPUnit, ki jo zažene CI, vključuje preizkus, ki ustvari matriko z označenimi nedosegljivimi izvornimi orodji in preveri obliko poročila, zato posamezen preizkus, ki začne odpovedovati, ne povzroči neuspeha CI. Pred izdajo znova ustvarite matriko in preglejte razlike.
Kaj sodi v matriko in kaj v dokumentacijo
Referenčni dokument CLI ter strani Združljivost / rg in Združljivost / sg opisujejo predvideni obseg. Matrika funkcij beleži preverjeni obseg, pri čemer so ob vsaki vrstici navedeni natančni argumenti preizkusa.
Če je nekaj dokumentirano, vendar manjka v matriki, je dokumentacija zastarela. Če je nekaj v matriki, vendar ni dokumentirano, je treba dokumentacijo dopolniti. Oboje se mora ujemati.
Primeri vrstic
Združljivost rg (izsek)
| Funkcija | rg | bin/rg | Opombe |
|---|---|---|---|
| Iskanje fiksnega niza | Uspešno | Uspešno | Preizkus: -F needle single.txt |
| Iskanje fiksnega niza brez razlikovanja med velikimi in malimi črkami | Uspešno | Uspešno | Preizkus: -F -i needle single.txt |
| Iskanje celih besed | Uspešno | Uspešno | Preizkus: -F -w needle words.txt |
| Filter glob | Uspešno | Uspešno | Preizkus: --glob *.php function . |
| Skrite datoteke | Uspešno | Uspešno | Preizkus: --hidden -F secret . |
| Strukturirani izhod JSON | Uspešno | Uspešno | Preizkus: --json -F needle single.txt z uporabo semantike dogodkov ripgrep JSON |
Združljivost sg (izsek)
| Funkcija | sg | bin/sg | Opombe |
|---|---|---|---|
Iskanje vzorca z run --pattern |
Uspešno | Uspešno | Preizkus: run --pattern array($$$ITEMS) src/App.php |
Prepis z run --rewrite |
Uspešno | Uspešno | Preizkus: run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] src/App.php |
| Izhod strukturiranega toka JSON | Uspešno | Uspešno | Preizkus: run --json=stream --pattern dispatch($EVENT) src/App.php |
| Prepis vseh pojavitev | Uspešno | Uspešno | Preizkus: run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] --update-all src/App.php |
Celotno tabelo najdete v FEATURE_MATRIX.md.
Zakaj preverjanje s preizkusi
Ročno vzdrževana tabela združljivosti zastara. Bistvo ovojnic je, da jih »namestite namesto klicev rg ali sg in še naprej delujejo«, to obljubo pa lahko ohranimo samo tako, da dejansko zaženemo izvorno orodje in ovojnico drugo ob drugem ter primerjamo rezultate. Izvajalnik preizkusov naredi prav to vsakič, ko znova ustvarimo matriko.