Pas pas gjashtë vitesh zhvillimi doli versioni i parë stabil i analizatorit statik PHPStan 1.0, i cili lejon gjetjen e gabimeve në kodin PHP pa e ekzekutuar atë dhe pa përdorur teste unitare. Kodi i projektit është shkruar në PHP dhe shpërndahet nën licencën MIT.
Analizatori ofron 10 nivele kontrolli, në të cilat çdo nivel i mëpasshëm zgjeron mundësitë e nivelit paraardhës dhe ofron verifikime më të rrepta:
Shembuj të problemeve bazike të identifikuara:
- Prania e klasave të përdorura në instanceof, catch, typehints dhe konstrukte të tjera të gjuhës.
- Prania dhe disponueshmëria e metodave dhe funksioneve të thirrur, si dhe numri i argumenteve të kaluara.
- Kontrolli i kthimit nga metoda të dhënave me të njëjtin tip siç është përcaktuar në shprehjen return.
- Prania dhe dukshmëria e pronave, të cilat aksesohen, si dhe kontrolli i tipeve të shpallura dhe atyre faktike të dhënave të përdorura në prona.
- Saktësia e numrit të parametrave të kaluara në thirrjet sprintf/printf në bllokun e formatimit të vargjeve.
- Prania e variableve duke marrë parasysh blloqet që krijohen nga operatorët e ndarjes dhe cikleve.
- Shndërrime të panevojshme të tipeve (p.sh., '(string) 'foo'') dhe kontrollit të fortë ('===' dhe '!==') të të dhënave me tipe dhe operanda të ndryshme, që gjithmonë kthejnë vlerën false.
Novitetet kryesore të PHPStan 1.0:
- Përgjegjësia e kontrollit "9" është implementuar, e cila kryen verifikime të përdorimit të tipit "mixed", e destinuar për organizimin e pranimit të funksionit të parametrave me tipo të ndryshme. Niveli i nëntë identifikon praktikat e pasigurta të përdorimit të "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 verifikimit të identitetit të vlerave të rikthyera për thirrje të njëjta funksionesh duke përdorur annotimet @phpstan-pure dhe @phpstan-impure.
- Analiza e tipeve në konstrukcione try-catch-finally duke përdorur annotimet @throws.
- Identifikimi i disa por jo të përdorur pronave, metodave dhe konstantave të brendshme (private).
- Kalimi i thirrjeve të callback-ve të paqartë në funksionet e punës me arrays, si array_map dhe usort.
- Inspektimi i tipeve për annotimet e mungesës typehint.
- është siguruar kompatibiliteti i përshkrimeve të tipeve me PHPDocs, duke lejuar përdorimin e tipeve nga mesazhet e gabimeve në PHPDocs.
Burimi: opennet.ru
