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
