Después de seis años de desarrollo, tuvo lugar la primera versión estable del analizador estático PHPStan 1.0, que permite encontrar errores en el código PHP sin ejecutarlo y utilizar pruebas unitarias. El código del proyecto está escrito en PHP y distribuido bajo la licencia MIT.
El analizador proporciona 10 niveles de verificación, en los que cada nivel posterior amplía las capacidades del anterior y proporciona comprobaciones más estrictas:
Ejemplos de problemas subyacentes identificados:
- La existencia de clases utilizadas en instancia de, captura, sugerencias de escritura y otras construcciones del lenguaje.
- La existencia y disponibilidad de métodos y funciones llamadas, así como el número de argumentos pasados.
- Comprobando que el método devuelve datos del mismo tipo definido en la expresión de retorno.
- La existencia y visibilidad de las propiedades a las que se accede, y la verificación de los tipos de datos declarados y reales utilizados en las propiedades.
- La cantidad de parámetros pasados a las llamadas sprintf/printf en el bloque de formato de cadena es correcta.
- La existencia de variables teniendo en cuenta bloques formados por operadores de ramificación y bucles.
- Conversiones de tipos inútiles (por ejemplo, "(string) 'foo'") y pruebas estrictas ("===" y "!==") en datos con diferentes tipos y operandos que siempre devuelven falso.
Innovaciones clave en PHPStan 1.0:
- Se ha implementado el nivel de verificación “9”, que verifica el uso del tipo “mixto”, destinado a organizar la recepción de parámetros por parte de la función con diferentes tipos. El nivel nueve identifica usos inseguros de "mixto", como pasar valores de tipo "mixto" a otro tipo, llamar a métodos de tipo "mixto" y acceder a sus propiedades porque es posible que no existan.
- Controle si los valores de retorno son idénticos para llamadas a funciones idénticas utilizando las anotaciones @phpstan-pure y @phpstan-impure.
- Análisis de tipos en construcciones try-catch-finally utilizando anotaciones @throws.
- Identificación de propiedades, métodos y constantes internas (privadas) definidas pero no utilizadas.
- Pasar devoluciones de llamada incompatibles a funciones de matriz como array_map y usort.
- Inspección de tipografía para detectar anotaciones tipográficas faltantes.
- Se hicieron declaraciones de tipos compatibles con PHPDocs, lo que permitió utilizar tipos de mensajes de error en PHPDocs.
Fuente: opennet.ru