Lançamento do PHPStan 1.0, um analisador estático para código PHP

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:

  • Verificações básicas, definição de classes, funções e métodos desconhecidos ($this), variáveis ​​indefinidas e passagem de número errado de argumentos.
  • Identificando variáveis ​​possivelmente indefinidas, métodos mágicos desconhecidos e propriedades de classes com __call e __get.
  • Detecção de métodos desconhecidos em todas as expressões, não limitado a chamadas via $this. Verificando PHPDocs.
  • Verificando tipos de retorno e atribuindo tipos a propriedades.
  • Identificação básica do código “morto” (nunca chamado). Identifique chamadas de instância que sempre retornam falsos, blocos "else" que nunca são acionados e código após o retorno.
  • Verificando os tipos de argumentos passados ​​para métodos e funções.
  • Aviso sobre anotações de informações de tipo ausentes.
  • Aviso sobre tipos de união incorretos que definem coleções de dois ou mais tipos.
  • Aviso sobre chamar métodos e acessar propriedades com tipos "anuláveis".
  • Verificando o uso do tipo “misto”.

    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

  • Adicionar um comentário