Pas gjashtë vitesh zhvillimi, u bë lëshimi i parë i qëndrueshëm i analizuesit statik PHPStan 1.0, i cili ju lejon të gjeni gabime në kodin PHP pa e ekzekutuar atë dhe duke përdorur testet e njësisë. Kodi i projektit është shkruar në PHP dhe shpërndahet nën licencën MIT.
Analizuesi siguron 10 nivele kontrolli, në të cilat secili nivel pasues zgjeron aftësitë e atij të mëparshmi dhe siguron kontrolle më të rrepta:
Shembuj të problemeve themelore të identifikuara:
- Ekzistenca e klasave të përdorura në instanceof, catch, typehints dhe konstruksione të tjera gjuhësore.
- Ekzistenca dhe disponueshmëria e metodave dhe funksioneve të thirrura, si dhe numri i argumenteve të kaluar.
- Kontrollimi që metoda kthen të dhëna me të njëjtin lloj siç përcaktohet në shprehjen e kthimit.
- Ekzistenca dhe dukshmëria e pronave që aksesohen, dhe kontrollimi i llojeve të të dhënave të deklaruara dhe aktuale të përdorura në pronat.
- Numri i parametrave të kaluar në thirrjet sprintf/printf në bllokun e formatimit të vargut është i saktë.
- Ekzistenca e variablave duke marrë parasysh blloqet e formuara nga operatorët e degëzimit dhe sythe.
- Llojet e padobishme (p.sh. "(string) 'foo') dhe teste strikte ("===" dhe "!==") mbi të dhënat me lloje dhe operandë të ndryshëm që kthehen gjithmonë false.
Risitë kryesore në PHPStan 1.0:
- Është zbatuar niveli i kontrollit "9", i cili kontrollon përdorimin e tipit "të përzier", i destinuar për organizimin e marrjes së funksionit të parametrave me lloje të ndryshme. Niveli XNUMX identifikon përdorime të pasigurta të "të përziera", të tilla si kalimi i vlerave të tipit "të përzier" në një lloj tjetër, thirrja e metodave të tipit "të përziera" dhe aksesi në pronat e tij sepse ato mund të mos ekzistojnë.
- Kontrolloni nëse vlerat e kthimit janë identike për thirrjet identike të funksioneve duke përdorur shënimet @phpstan-pure dhe @phpstan-impure.
- Lloji analizë në konstruktet provo-catch-finally duke përdorur shënimet @throws.
- Identifikimi i vetive, metodave dhe konstantave të përcaktuara por të papërdorura të brendshme (private).
- Kalimi i kthimeve të thirrjeve të papajtueshme te funksionet e grupit si array_map dhe usort.
- Inspektimi i tipit për shënimet e tekstit që mungojnë.
- Deklarimet e bëra të tipit të pajtueshme me PHPDocs, duke lejuar që llojet nga mesazhet e gabimit të përdoren në PHPDocs.
Burimi: opennet.ru