Després de sis anys de desenvolupament, va tenir lloc el primer llançament estable de l'analitzador estàtic PHPStan 1.0, que permet trobar errors en el codi PHP sense executar-lo i utilitzant proves unitàries. El codi del projecte està escrit en PHP i es distribueix sota la llicència MIT.
L'analitzador ofereix 10 nivells de comprovació, en els quals cada nivell posterior amplia les capacitats de l'anterior i proporciona controls més estrictes:
Exemples de problemes subjacents identificats:
- L'existència de classes utilitzades en instanceof, catch, typehints i altres construccions del llenguatge.
- L'existència i disponibilitat dels mètodes i funcions cridats, així com el nombre d'arguments passats.
- Comprovar que el mètode retorna dades amb el mateix tipus que es defineix a l'expressió de retorn.
- L'existència i la visibilitat de les propietats a les quals s'accedeix, i la comprovació dels tipus de dades declarats i reals utilitzats a les propietats.
- El nombre de paràmetres passats a les trucades sprintf/printf al bloc de format de cadena és correcte.
- L'existència de variables tenint en compte blocs formats per operadors de ramificació i bucles.
- Emissions de tipus inútils (per exemple, "(cadena) 'foo'") i proves estrictes ("===" i "!==") sobre dades amb diferents tipus i operands que sempre retornen fals.
Innovacions clau en PHPStan 1.0:
- S'ha implementat el nivell de verificació “9”, que verifica l'ús del tipus “mixt”, destinat a organitzar la recepció de paràmetres de diferents tipus per part de la funció. El nivell nou identifica usos no segurs de "mixt", com ara passar valors de tipus "mixt" a un altre tipus, cridar mètodes de tipus "mixt" i accedir a les seves propietats perquè potser no existeixen.
- Controleu si els valors de retorn són idèntics per a trucades de funcions idèntiques mitjançant les anotacions @phpstan-pure i @phpstan-impure.
- Anàlisi de tipus a les construccions try-catch-finally utilitzant anotacions @throws.
- Identificació de propietats, mètodes i constants internes (privades) definits però no utilitzats.
- Passant devolucions de trucada incompatibles a funcions de matriu com ara array_map i usort.
- Inspecció de tipus per a les anotacions que falten.
- Fet que les declaracions de tipus siguin compatibles amb PHPDocs, permetent que els tipus de missatges d'error s'utilitzin a PHPDocs.
Font: opennet.ru