Pärast kuueaastast arendustööd on välja antud PHPStan 1.0, staatilise analüsaatori esimene stabiilne versioon, mis võimaldab leida PHP koodis vigu ilma selle käitamiseta ja unit-testide kasutamiseta. Projekti kood on kirjutatud PHP keeles ja levitatakse MIT litsentsi alusel.
Analüsaator pakub 10 kontrollitaset, kus iga järgmine tase laiendab eelneva võimalusi ja pakub rangemaid kontrolle:
Näited tuvastatud põhiprobleemidest:
- Klasside olemasolu, mida kasutatakse instanceof, catch, typehints ja muudes keelkonstruktsioonides.
- Kutsutavate meetodite ja funktsioonide olemasolu ja kättesaadavus ning edastatavate argumentide arv.
- Kontroll, et meetod tagastab andmed sama tüübiga, mis on määratud return väljendis.
- Omandite olemasolu ja nähtavus, millesse päästetakse, samuti kontrollitud ja tegelike andmetüüpide kontroll, mida kasutatakse omadustes.
- Parameetrite arvu täpsus, mis edastatakse sprintf/printf kutsumistes stringide vormindamise plokkides.
- Muutujate olemasolu, arvestades plokke, mis on loodud haru ja tsükli operaatoritega.
- Kasutu tüüpide konverteerimine (näiteks '(string) 'foo'') ja ranged kontrollid ('===' ja '!==') andmete puhul, millel on erinevad tüübid ja operaatorid, mis alati tagastavad vale.
PHPStan 1.0 peamised uuendused:
- Teostatud on kontrollitase „9“, mis teostab „mixed“ tüüpi kasutamise kontrolli, et võimaldada erinevate tüüpidega parameetrite vastuvõtmist funktsioonis. Üheksas tase tuvastab ebaselged „mixed“ kasutamisviisid, näiteks väärtuste edastamine „mixed“ tüübist teisele tüübile, „mixed“ tüübiga meetodite kutsumine ja selle omaduste kasutamine, kuna need võivad puududa.
- Tagastatud väärtuste identiteedi kontrollimiseks ja sama funktsioonikutsumise haldamiseks kasutatakse annotatsioone @phpstan-pure ja @phpstan-impure.
- Tüüpide analüüs try-catch-finally konstruktsioonides annotatsioonide @throws abil.
- Teatud, kuid mitte kasutatavate sisemiste (private) omaduste, meetodite ja konstantide tuvastamine.
- Ühilduvate callback-kutsungite edastamine massiivide töötlemise funktsioonidesse, nagu array_map ja usort.
- Tüüpide kontrollimine puuduvate typehint-annotatsioonide jaoks.
- Tagatud on tüübikirjelduste ühilduvus PHPDocs-iga, mis võimaldab PHPDocs-is kasutada vigade teadetes esitatud tüüpe.
Allikas: opennet.ru
