Após seis anos de desenvolvimento, a primeira versão estável do analisador estático PHPStan 1.0 foi lançada, permitindo encontrar erros no código em PHP sem executá-lo ou usar testes unitários. O código do projeto está escrito em PHP e é distribuído sob a licença MIT.
O analisador fornece 10 níveis de verificação, onde cada nível subsequente amplia as capacidades do anterior e fornece verificações mais rigorosas:
Exemplos de problemas básicos detectados:
- Existência de classes usadas em instanceof, catch, typehints e outras construções da linguagem.
- Existência e acessibilidade de métodos e funções chamáveis, bem como o número de argumentos passados.
- Verificação de que o método retorna dados do mesmo tipo que o definido na expressão return.
- Existência e visibilidade de propriedades acessadas, bem como verificação de tipos de dados declarados e reais usados nas propriedades.
- Corretude do número de parâmetros passados nas chamadas sprintf/printf no bloco de formatação de strings.
- Existência de variáveis considerando blocos formados por operadores de controle e loops.
- Conversões de tipo inúteis (por exemplo, '(string) 'foo'') e checagens rigorosas ('===' e '!==') de dados com tipos e operandos diferentes, que sempre retornam false.
Principais novidades do PHPStan 1.0:
- Implementado o nível de verificação "9", que realiza verificações sobre o uso do tipo "mixed", destinado a organizar a aceitação de parâmetros de função com diferentes tipos. O nono nível identifica práticas inseguras de uso de "mixed", como a transferência de valores do tipo "mixed" para outro tipo, a chamada de métodos com tipo "mixed" e o acesso a suas propriedades, já que elas podem não existir.
- Gerenciamento da verificação de identidade dos valores retornados para chamadas de funções idênticas usando as anotações @phpstan-pure e @phpstan-impure.
- Análise de tipos em estruturas try-catch-finally usando anotações @throws.
- Identificação de certas propriedades, métodos e constantes internas (private) que não são utilizados.
- Transferência de chamadas de callback incompatíveis em funções de manipulação de arrays, como array_map e usort.
- Inspeção de tipos para anotações typehint ausentes.
- Compatibilidade das descrições de tipos com PHPDocs, permitindo o uso de tipos das mensagens de erro nas PHPDocs.
Fonte: opennet.ru
