Pas pas gjashtë vjet zhvillimi, doli versioni i parë stabil i analizatorit statik PHPStan 1.0, që lejon identifikimin e gabimeve në kodin PHP pa ekzekutimin e tij dhe pa përdorimin e testeve unit. Kodi i projektit është shkruar në PHP dhe shpërndahet nën licencën MIT.
Analizatori ofron 10 nivele kontrolli, ku çdo nivel i mëpasshëm zgjeron kapacitetet e nivelit të mëparshëm dhe ofron kontroll më të rreptë:
Shembuj të problemeve bazë të identifikuara:
- Ekzistenca e klasave të përdorura në instanceof, catch, typehints dhe struktura të tjera të gjuhës.
- Ekzistenca dhe disponueshmëria e metodave dhe funksioneve që thirren, si dhe numri i argumenteve të kaluara.
- Kontrolli i kthimit të të dhënave nga metoda me të njëjtin tip, siç përcaktohet në shprehjen return.
- Ekzistenca dhe dukshmëria e pronave, të cilat qasen, si dhe verifikimi i typeve të shpallura dhe ato aktuale të të dhënave që përdoren në prona.
- Saktësia e numrit të parametrave të kaluara në thirrjet sprintf/printf në bllokun e formatimit të vargjeve.
- Ekzistenca e variablave duke marrë parasysh blloqet, që formohen nga operatorët e ndarjes dhe ciklet.
- Përtuarjet e kota të tipeve (p.sh., "(string) 'foo'") dhe kontrolli strikt ("===" dhe "!==") të të dhënave me tipe dhe operanda të ndryshme, që gjithmonë kthejnë vlerën false.
Novitetet kryesore të PHPStan 1.0:
- Niveli i kontrollit "9" është implementuar, duke realizuar kontrolle të përdorimit të tipit "mixed", i destinuar për të organizuar pranimin e parametrave me tipe të ndryshme nga funksioni. Niveli i nëntë zbarton praktikata të pasigurta në përdorimin e "mixed", siç është kalimi i vlerave me tipin "mixed" në një tip tjetër, thirrja e metodave me tipin "mixed" dhe qasja në pronat e tij, pasi ato mund të mos ekzistojnë.
- Menaxhimi i kontrollit të identitetit të vlerave të kthyer për thirrje të ngjashme të funksioneve duke përdorur annotimet @phpstan-pure dhe @phpstan-impure.
- Analiza e tipeve në strukturat try-catch-finally duke përdorur annotimet @throws.
- Identifikimi i pronave, metodave dhe konstantave të brendshme (private) të caktuara, por të papërdorura.
- Kalimi i thirrjeve të callback të paqëndrueshme në funksionet e manipulimit të vargjeve, siç janë array_map dhe usort.
- Inspektimi i tipeve për annotimet e mungueshme të typehint.
- ĂshtĂ« siguruar kompatibiliteti i pĂ«rshkrimeve tĂ« tipeve me PHPDocs, qĂ« lejon pĂ«rdorimin e tipave nga mesazhet e gabimeve nĂ« PHPDocs.
Burimi: opennet.ru
