Despois de seis anos de desenvolvemento, tivo lugar a primeira versión estable do analizador estático PHPStan 1.0, que permite atopar erros no código PHP sen executalo e utilizando probas unitarias. O código do proxecto está escrito en PHP e distribúese baixo a licenza MIT.
O analizador ofrece 10 niveis de comprobación, nos que cada nivel posterior amplía as capacidades do anterior e proporciona comprobacións máis rigorosas:
Exemplos de problemas subxacentes identificados:
- A existencia de clases utilizadas en instanceof, catch, typehints e outras construcións lingüísticas.
- A existencia e dispoñibilidade de métodos e funcións chamados, así como o número de argumentos pasados.
- Comprobando que o método devolve datos co mesmo tipo que o definido na expresión de retorno.
- A existencia e visibilidade das propiedades ás que se accede, e a comprobación dos tipos de datos declarados e reais utilizados nas propiedades.
- O número de parámetros pasados ás chamadas sprintf/printf no bloque de formato de cadea é correcto.
- A existencia de variables tendo en conta bloques formados por operadores de ramificación e bucles.
- Casts de tipos inútiles (por exemplo, "(cadea) 'foo'") e probas estritas ("===" e "!==") en datos con diferentes tipos e operandos que sempre devolven falso.
Innovacións clave en PHPStan 1.0:
- Implementouse o nivel de comprobación “9”, que verifica o uso do tipo “mixto”, destinado a organizar a recepción de parámetros da función con distintos tipos. O nivel XNUMX identifica usos inseguros de "mixto", como pasar valores de tipo "mixto" a outro tipo, chamar a métodos de tipo "mixto" e acceder ás súas propiedades porque poden non existir.
- Controla se os valores de retorno son idénticos para chamadas de funcións idénticas usando as anotacións @phpstan-pure e @phpstan-impure.
- Análise de tipos en construcións try-catch-finally usando anotacións @throws.
- Identificación de propiedades, métodos e constantes internas (privadas) definidas pero non utilizadas.
- Pasando devolucións de chamada incompatibles a funcións de matriz como array_map e usort.
- Inspección de tipo para as anotacións de indicación de tipo que faltan.
- Fixo declaracións de tipos compatibles con PHPDocs, permitindo que os tipos de mensaxes de erro se utilicen en PHPDocs.
Fonte: opennet.ru