Pärast kuueaastast arendustööd ilmus PHPStan 1.0, esimene stabiilne versioon staatilisest analüüsijast, mis võimaldab leida PHP-koodis vigu ilma selle käivitamiseta ja üksuste teste kasutamata. Projekti kood on kirjutatud PHP keeles ja jagatakse MIT litsentsi alusel.
Analüsaator pakub 10 kontrollitaset, kus igas järgmises tasemes laiendatakse eelmise võimalusi ja pakutakse rangemaid kontrolle:
Tuvastatud põhiprobleemide näited:
- Klasside olemasolu, mida kasutatakse instanceof, catch, typehints ja teiste keelekonstruktsioonide puhul.
- Kutsutavate meetodite ja funktsioonide olemasolu ja kättesaadavus, samuti edastatavate argumendi arv.
- Kontrollige, kas meetod tagastab andmeid, mille tüüp on sama, mis return'i lauses määratletud.
- Atribuutide olemasolu ja nähtavus, millele pöördutakse, samuti kuulutatud ja tegelike andmetüüpide kontroll, mida atribuutides kasutatakse.
- Argumentide arvu korrektne kontroll sprintf/printf kutsumisel stringi vormindamise plokis.
- Muuttute olemasolu, arvestades plokke, mis moodustuvad haru- ja tsükliliste käskude kaudu.
- Kasutu tüüpide muutmine (näiteks «(string) ‘foo’») ja ranged kontrolld skaaladega (nt «===» ja «!==») andmete kohta, mis on alati false.
PHPStan 1.0 peamised uuendused:
- Tasetud on tase "9", mis kontrollib "mixed" tüübi kasutamise regulaarsust, et võimaldada funktsiooniparametrite vastuvõtmist erinevatest tüüpidest. Üheksas tase tuvastab "mixed" tüübi kasutamisel riskantsed praktikad, nagu näiteks "mixed" tüüpi väärtuste edastamine teise tüübiga, meetodite kutsumine "mixed" tüübiga ja selle omadustele pääsemine, kuna need võivad puududa.
- Tagastatud väärtuste identiteedi kontroll, kui kutsutakse funktsioone, kasutades annotatsioone @phpstan-pure ja @phpstan-impure.
- Tüüpide analüüs try-catch-finally konstruktsioonides annotatsioonide @throws kasutamisega.
- Teatud, kuid kasutamata privaatsete (private) omaduste, meetodite ja konstantide tuvastamine.
- Ühildumatute callback-kutsungite edastamine massiivide töötlemise funktsioonidesse, nagu array_map ja usort.
- Tüüpide kontrollimine puuduvate typehint-annotatsioonide jaoks.
- Tüüpide kirjelduste ühilduvus PHPDocsiga on tagatud, võimaldades PHPDocsis kasutada vigu käsitlevaid tüüpe.
Allikas: opennet.ru
