Pärast kuueaastast arendustööd toimus esimene stabiilne staatilise analüsaatori PHPStan 1.0 väljalase, mis võimaldab PHP koodis vigu leida ilma seda käivitamata ja ühikteste kasutamata. Projekti kood on kirjutatud PHP-s ja seda levitatakse MIT-i litsentsi all.
Analüsaator pakub 10 kontrollitaset, milles iga järgmine tase laiendab eelmise võimalusi ja pakub rangemaid kontrolle:
Näited tuvastatud põhiprobleemidest:
- Klasside olemasolu, mida kasutatakse näite, püüdmise, kirjavihjete ja muude keelekonstruktsioonide puhul.
- Kutsutud meetodite ja funktsioonide olemasolu ja kättesaadavus, samuti läbitud argumentide arv.
- Kontrollige, kas meetod tagastab sama tüüpi andmed, mis on määratud tagastusavaldises.
- Juurdepääsetavate atribuutide olemasolu ja nähtavus ning atribuutides kasutatavate deklareeritud ja tegelike andmetüüpide kontrollimine.
- Stringi vormindamise plokis on sprintf/printf kutsetele edastatud parameetrite arv õige.
- Muutujate olemasolu, võttes arvesse hargnevate operaatorite ja silmuste moodustatud plokke.
- Kasutud tüübiheitmed (nt "(string) 'foo") ja ranged testid ("===" ja "!==") erinevate tüüpide ja operandidega andmetele, mis tagastavad alati vale.
Peamised uuendused PHPStan 1.0-s:
- Rakendatud on kontrolltase “9”, mis kontrollib “sega” tüübi kasutamist, mis on mõeldud funktsiooni eri tüüpi parameetrite vastuvõtu korraldamiseks. Tase XNUMX tuvastab "segatud" ebaturvalised kasutused, näiteks "segatud" tüübi väärtuste üleandmine teisele tüübile, "segatud" tüüpi meetodite kutsumine ja juurdepääs selle omadustele, kuna neid ei pruugi olla.
- Kontrollige, kas tagastusväärtused on identsete funktsioonikutsete puhul identsed, kasutades märkusi @phpstan-pure ja @phpstan-impure.
- Tüübianalüüs konstruktsioonides try-catch-finally konstrueerib @throws märkuste abil.
- Määratletud, kuid kasutamata sisemiste (privaatsete) omaduste, meetodite ja konstantide tuvastamine.
- Ühildumatute tagasihelistuste edastamine massiivifunktsioonidele, nagu array_map ja usort.
- Tüübikontroll puuduvate kirjavihjete märkuste tuvastamiseks.
- Muutis tüübideklaratsioonid PHPDocs-iga ühilduvaks, võimaldades PHPDocsis kasutada veateadete tüüpe.
Allikas: opennet.ru