Como analisar estaticamente o armazenamento de phptan

PHPStan é um sistema de análise estática para projetos PHP. Encontre bugs em sua base de código inspecionando os arquivos de origem. Não há necessidade de codificar manualmente ou escrever testes para encontrar problemas!

O termo "análise estática" é definido como código de depuração sem realmente executá-lo. É frequentemente usado com linguagens interpretadas, como PHP, pois os problemas que encontra tendem a surgir em tempo de compilação em linguagens compiladas.

A análise estática tende a funcionar melhor quando realizada dentro de uma base de código bem estruturada e fortemente tipada. A documentação do PHPStan recomenda que "Código orientado a objetos moderno" será o mais beneficiado, pois esses projetos fornecem ao PHPStan mais informações para trabalhar.

índice

  1. Adicionando PHPStan ao projeto
  2. Tipos e níveis de erros
  3. Configuração do PHP Stan
  4. ignorar erros
  5. Regras opcionais
  6. Conclusão

Adicionando PHPStan ao projeto

Para executar o PHPStan, você precisa do PHP 7.1 ou posterior. Este requisito se aplica apenas à versão do PHP usada para executar o PHPStan. A ferramenta é capaz de analisar arquivos de origem destinados a versões mais antigas do PHP.

Recomenda-se usar o Composer para adicionar o PHPStan como dependência:

 compositor requer --dev phpstan/phpstan

O binário PHPStan será adicionado ao seu projeto em vendor/bin/phpstan . Agora você pode usá-lo para analisar sua base de código pela primeira vez:

 Vendor/bin/phpstan analisar src

O comando mostrado acima executará testes PHPStan em todos os arquivos de origem em seu diretório src . Dependendo do tamanho do código base, pode levar alguns minutos para ser concluído.

Você verá um verde "[OK] Nenhum erro se todos os testes passarem. Caso contrário, a lista de erros encontrados será exibida. Siga o guia exibido para resolver quaisquer erros antes de executar o PHPStan novamente.

Tipos e níveis de erros

O PHPStan inclui um grande número de verificações que cobrem uma ampla variedade de possíveis problemas de base de código. Alguns dos mais comuns que você encontrará incluem o seguinte:

  • Problemas do sistema de tipos – Dar a uma propriedade tipada um valor inválido ou passar parâmetros com erros ortográficos para um método. Isso também inclui problemas de contrato, como uma classe implementando incorretamente uma interface.
  • Chamadas de função – Passar muitos ou poucos parâmetros ao chamar uma função ou método (por exemplo, 3 em vez de 4).
  • Classes, métodos e funções desconhecidos – Tente usar algo que não existe no código base.
  • Acesso a variáveis ​​indefinidas/possivelmente indefinidas – Tente usar uma variável que não esteja definida em um determinado escopo, ou que nem sempre tenha um valor, mas seja usada em um contexto em que um é assumido.
  • Dead Code Check – Relata código inútil, como comparações booleanas que sempre resolverão para o mesmo valor e ramificações de código que nunca serão executadas (por exemplo, código que segue uma instrução de return dentro de funções).

As regras são classificadas em 9 "níveis" diferentes, rotulados de 0 a 8. O nível especial max atua como um alias para o nível mais alto possível. Com o tempo, o PHPStan pode adicionar níveis numéricos adicionais, portanto, usar max garante que você sempre obtenha os controles mais rígidos possíveis.

Por padrão, o PHPStan é executado no nível 0. Isso inclui apenas os testes mais básicos. É uma boa ideia fazer com que a base de código passe cada nível individualmente antes de passar para o próximo. Projetos maduros provavelmente encontrarão outro conjunto de problemas a cada novo nível.

Para alterar o nível usado pelo PHPStan, você pode substituir o parâmetro de linha de comando --level :

vendor/bin/phpstan analyse src --level 8

Além dos controles integrados, as extensões PHPStan estão disponíveis para adicionar ainda mais funcionalidades. Você também pode escrever suas próprias regras do zero. Isso é útil ao descontinuar recursos que os desenvolvedores não devem mais usar em nenhum novo código. Abordaremos a criação de regras personalizadas em um artigo futuro.

Configuração do PHP Stan

Além da experimentação inicial, usar a interface de linha de comando do PHPStan pode se tornar entediante rapidamente. É melhor adicionar um arquivo de configuração ao projeto que pode ser atribuído ao controle do código-fonte para todos os desenvolvedores usarem.

O PHPStan usa o formato de arquivo de configuração da extensão Nen, que tem uma sintaxe muito semelhante ao YAML. Crie um arquivo phpstan.neon no diretório raiz do projeto. Este arquivo é carregado automaticamente quando o PHPStan é iniciado, então agora você pode executar o comando analyse sem mais argumentos:

 Vendor/bin/phpstan analisar

Para substituir o arquivo de configuração usado, passe o sinalizador --configuration :

 Vendor/bin/phpstan analisar --configuration /phpstan-config.neon

Agora você precisa preencher seus arquivos phpstan.neon com algum conteúdo. Um bom ponto de partida pode ser este:

 parâmetros: nível: 0 caminhos: -src

Este arquivo de configuração básica deve fornecer a mesma saída que a chamada de linha de comando mostrada acima. Você pode adicionar diretórios adicionais para verificar como novas linhas na seção de paths de arquivo. Para excluir arquivos e diretórios, adicione-os a uma planilha excludes_analyse na seção de parameters .

ignorar erros

Ocasionalmente o PHPStan pode levantar um problema que é inevitável. Se houver um problema que você não pode corrigir imediatamente, talvez queira ignorá-lo explicitamente para permitir que os testes sejam aprovados.

Isso é especialmente importante quando você deseja ir para outro nível de controles ou está usando PHPStan em um ambiente de CI em que uma execução com falha interromperá a implantação da compilação. Ainda assim, não tome este curso de ânimo leve; Você só deve optar por ignorar um erro relatado se tiver certeza de que será seguro fazê-lo.

Uma vez tomada a decisão, adicione um novo arquivo seção ignoreErrors dentro do arquivo de configuração de parameters . Você deve definir a mensagem para corresponder, como um regex, e as rotas para aplicar a exclusão:

 parâmetros: nível: 0 caminhos: - src ignoreErrors: - mensagem: '/ tipo de retorno string do método ExampleClass::example() não é covariante(.*).' caminho: src/ExampleClass.php

Opcionalmente, você pode especificar paths como uma matriz de caminhos, substituindo a chave de path único mostrada acima.

Regras opcionais

O rigor do PHPStan pode ser ajustado usando várias variáveis ​​de configuração. Permitem afinar as verificações que são realizadas, fora do sistema de nível descrito acima. Alguns deles são potencialmente controversos ou improváveis ​​de se alinharem com todos os guias de estilo privados, portanto, estão desativados por padrão.

Algumas configurações que podem valer a pena habilitar incluem:

  • checkAlwaysTrueInstanceof – Usa sinalizadores instanceof que sempre avaliam como true .
  • checkAlwaysTrueStrictComparison – Verifica quando uma expressão usa === ou !== para sempre ser avaliada como true .
  • checkFunctionNameCase – Garante que os nomes das funções do shell correspondam à sua definição quando chamados em toda a base de código.
  • polluteScopeWithLoopInitialAssignments – Quando definido como falsetrue por padrão), as variáveis ​​declaradas nas declarações iniciais do loop (por exemplo $i em $for ($i = 1; $i < 10; $i++) ) são impedidas de acessar fora do bloco de código do loop , evitando possível contaminação da área principal.
  • reportStaticMethodSignatures – Impõe a verificação completa de tipos para parâmetros e tipos de retorno em métodos estáticos quando substituídos por uma classe filha.

Detalhes completos sobre essas configurações opcionais e muito mais podem ser encontrados na referência de configuração do PHPStan.

Conclusão

Este é o fim de nossa introdução ao PHPStan. Ele ajuda você a ter confiança em sua base de código e destaca possíveis problemas antes que eles se tornem um problema de produção.

O PHPStan é tão rápido de configurar que realmente não há razão para não usá-lo, especialmente ao trabalhar com uma base de código moderna e fortemente tipada. Não se iluda pensando que pode substituir o teste manual. O PHPStan pode apresentar uma ampla variedade de controles, mas não consegue identificar problemas lógicos e não entende as regras de negócios do projeto. É apenas mais um recurso em sua caixa de ferramentas ao avaliar a integridade de uma base de código, trabalhando ao lado de companheiros confiáveis, como testes de unidade e testes de funcionalidade de ponta a ponta.

  • Qual é o sinal e por que todo mundo o usa?
  • Como parar notificações cardio baixas no Apple Watch

descubra mais conteúdo

Google Pixel Watch também tem detecção de queda, mas não até o próximo ano

As melhores xícaras de café aquecidas de 2022

Como automatizar seu iPhone com base na hora, atividade ou localização

"Isso deve ter sido antes do meu tempo"

Por que a NASA enviou Snoopy para a Lua? – Revisão Geek

O que é uma carga fantasma?

Deixe uma resposta Cancelar resposta

Ir arriba