Matricea funcționalităților
Matricea funcționalităților este un raport generat care înregistrează, pentru fiecare opțiune și comportament acceptat, dacă instrumentul nativ și wrapper-ul Greph produc rezultate echivalente. Este sursa de referință pentru întrebările de tipul „acceptă Greph acest lucru?”.
Matricea este regenerată prin teste reale cu comenzi, rulate într-un spațiu de lucru de testare determinist. Dovezile brute se află în FEATURE_MATRIX.json, iar tabelul redat în FEATURE_MATRIX.md.
Legendă de stare
| Stare | Semnificație |
|---|---|
Pass |
Testul a rulat și a corespuns comportamentului așteptat |
Fail |
Testul a rulat, dar nu a îndeplinit comportamentul așteptat |
Unavailable |
Comanda furnizorului nu era disponibilă în acest mediu |
Secțiuni
Matricea este organizată în șase secțiuni:
- Suprafața de compatibilitate rg: fiecare test rulează atât cu binarul
rgdin proiectul original, cât și cubin/rg. Ambele trebuie săPasspentru ca rândul să fie marcat ca acceptat. - Suprafața de compatibilitate sg: fiecare test rulează atât cu binarul
sgdin proiectul original, cât și cubin/sg. Ambele trebuie săPasspentru ca rândul să fie marcat ca acceptat. - Suprafața exclusivă wrapper-ului sg: teste care vizează doar
bin/sg(funcționalități suplimentare oferite de wrapper, dar absente din ast-grep propriu-zis). - Suprafața nativă greph: teste care exercită direct
bin/greph. Nu există un instrument original cu care să fie comparat; testele verifică comportamentul așteptat în spațiul de lucru de testare. - Suprafața greph indexată: teste care exercită
bin/greph-index(compilare, reîmprospătare și căutare text încălzită). - Suprafața bibliotecii AST indexate: teste care apelează PHP API (
Greph::buildAstIndex(),Greph::searchAstIndexed(),Greph::buildAstCache(),Greph::searchAstCached()) și verifică compilarea, căutarea și reîmprospătarea.
Regenerarea matricei
php bin/feature-matrix
Rulați dintr-o clonă a depozitului cu rg și sg pe PATH; bin/feature-matrix nu face parte din pachetul Composer. Acesta compilează spațiul de lucru de testare, rulează fiecare test de compatibilitate cu binarul original (dacă este instalat) și cu wrapper-ul Greph, înregistrează rezultatul structurat și scrie atât FEATURE_MATRIX.json, cât și FEATURE_MATRIX.md. Transmiteți --stdout pentru a afișa Markdown fără a scrie niciunul dintre fișiere.
Fișierele incluse în depozit sunt regenerate manual; CI nu le regenerează. Suita PHPUnit rulată de CI include un test care generează matricea cu instrumentele originale marcate ca indisponibile și verifică structura raportului, astfel încât eșecul unui singur test să nu oprească CI. Regenerați matricea și examinați diferențele înainte de o lansare.
Ce se află în matrice și ce în documentație
Referința CLI și paginile Compatibilitate / rg și Compatibilitate / sg descriu suprafața intenționată. Matricea funcționalităților înregistrează suprafața verificată, cu argumentele exacte ale testului lângă fiecare rând.
Dacă ceva este documentat, dar lipsește din matrice, documentația este învechită. Dacă ceva apare în matrice, dar nu este documentat, trebuie completată documentația. Ambele trebuie să corespundă.
Exemple de rânduri
Compatibilitate rg (extras)
| Funcționalitate | rg | bin/rg | Note |
|---|---|---|---|
| Căutare cu șir fix | Reușit | Reușit | Test: -F needle single.txt |
| Căutare cu șir fix fără diferențiere între majuscule și minuscule | Reușit | Reușit | Test: -F -i needle single.txt |
| Căutare după cuvânt întreg | Reușit | Reușit | Test: -F -w needle words.txt |
| Filtru Glob | Reușit | Reușit | Test: --glob *.php function . |
| Fișiere ascunse | Reușit | Reușit | Test: --hidden -F secret . |
| Rezultat JSON structurat | Reușit | Reușit | Test: --json -F needle single.txt cu semantica evenimentelor ripgrep JSON |
Compatibilitate sg (extras)
| Funcționalitate | sg | bin/sg | Note |
|---|---|---|---|
Căutare după model cu run --pattern |
Reușit | Reușit | Test: run --pattern array($$$ITEMS) src/App.php |
Rescriere prin run --rewrite |
Reușit | Reușit | Test: run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] src/App.php |
| Rezultat flux JSON structurat | Reușit | Reușit | Test: run --json=stream --pattern dispatch($EVENT) src/App.php |
| Rescriere cu actualizare globală | Reușit | Reușit | Test: run --pattern array($$$ITEMS) --rewrite [$$$ITEMS] --update-all src/App.php |
Pentru tabelul complet, consultați FEATURE_MATRIX.md.
De ce teste bazate pe probe
Un tabel de compatibilitate întreținut manual ajunge să nu mai fie actualizat. Scopul wrapper-elor este să le puteți folosi în locurile în care apelați de obicei rg sau sg, iar ele să funcționeze în continuare; singurul mod de a păstra această promisiune este să rulați efectiv instrumentul original și wrapper-ul unul lângă altul și să comparați rezultatele. Executorul de teste face exact acest lucru de fiecare dată când matricea este regenerată.