Após seis anos de desenvolvimento, ocorreu o primeiro lançamento estável do analisador estático PHPStan 1.0, que permite encontrar erros no código PHP sem executá-lo e usando testes unitários. O código do projeto é escrito em PHP e distribuído sob licença do MIT.
O analisador fornece 10 níveis de verificação, nos quais cada nível subsequente expande as capacidades do anterior e fornece verificações mais rigorosas:
Exemplos de problemas subjacentes identificados:
- A existência de classes usadas em instanceof, catch, typehints e outras construções de linguagem.
- A existência e disponibilidade de métodos e funções chamadas, bem como a quantidade de argumentos passados.
- Verificando se o método retorna dados com o mesmo tipo definido na expressão de retorno.
- A existência e visibilidade das propriedades que estão sendo acessadas e a verificação dos tipos de dados declarados e reais utilizados nas propriedades.
- O número de parâmetros passados para chamadas sprintf/printf no bloco de formatação de string está correto.
- A existência de variáveis que levam em conta blocos formados por operadores de ramificação e loops.
- Conversões de tipo inúteis (por exemplo, "(string) 'foo'") e testes rigorosos ("===" e "!==") em dados com diferentes tipos e operandos que sempre retornam falso.
Principais inovações no PHPStan 1.0:
- Foi implementado o nível de verificação “9”, que verifica a utilização do tipo “misto”, destinado a organizar a recepção de parâmetros de diferentes tipos pela função. O nível XNUMX identifica usos inseguros de "misto", como passar valores do tipo "misto" para outro tipo, chamar métodos do tipo "misto" e acessar suas propriedades porque elas podem não existir.
- Controle se os valores de retorno são idênticos para chamadas de função idênticas usando as anotações @phpstan-pure e @phpstan-impure.
- Análise de tipo em construções try-catch-finalmente usando anotações @throws.
- Identificação de propriedades, métodos e constantes internas (privadas) definidas mas não utilizadas.
- Passando retornos de chamada incompatíveis para funções de array como array_map e usort.
- Inspeção de tipo para anotações de typehint ausentes.
- Tornou as declarações de tipo compatíveis com PHPDocs, permitindo que tipos de mensagens de erro sejam usados em PHPDocs.
Fonte: opennet.ru