PHP

16 jul, 2019

Detectando erros no seu código sem executá-lo com PHPStan

Publicidade

Fala devs, tudo certo?

No artigo anterior escrevi aqui sobre o PHP CS Fixer, uma ferramenta bastante útil para verificar e aplicar correções no seu código, caso ele não esteja de acordo com os padrões de codificação e estilo de código recomendados pela comunidade.

Seguindo na direção de mostrar ferramentas que podem ser úteis no cotidiano do dev PHP, gostaria de escrever hoje sobre uma ferramenta que é capaz de detectar erros no seu código sem a necessidade de executa-lo.

Estou falando do nosso querido PHPStan!

Instalação:

composer require --dev phpstan/phpstan

Caso de Uso:

Escrevi uma aplicação muito simples que deve imprimir no terminal a frase: Hello + o nome que eu passar como parâmetro no construtor da classe, por exemplo: “Hello Gustavo Fraga!”

Considere a seguinte estrutura de diretórios:

E os arquivos com o seguinte conteúdo:

Rodando a Aplicação:

Utilização:

No terminal, rode o seguinte comando:

vendor\bin\phpstan analyse src --level 7

Resultado:

Com este comando o PHPStan executa uma análise em todos os códigos que estão nos diretórios “public” e “src”, mas é possível apontar para qualquer diretório ou arquivo específico.

O “–level” no final do comando é o parâmetro que define o nível da análise que a ferramenta irá executar em nosso código. Os níveis vão do 0 ao 7 e quanto maior, mais rigorosa será a análise. Para ver todos os detalhes sobre rule levels eu recomendo que visitem essa seção específica na documentação oficial do projeto.

Simulando Erros:

Considere as alterações no conteúdo dos arquivos abaixo:

Neste caso, estou simulando alguns erros propositalmente para que possamos ver a ferramenta em ação.

No exemplo acima os erros podem parecer óbvios, mas no dia a dia lidamos com códigos que envolvem maior complexidade, e assim, deixamos alguns erros passarem sem perceber.

Resultado da Execução do PHPStan:

Entendendo os Erros:

O primeiro erro acusado refere-se ao tipo de parâmetro que o construtor da classe “HelloController” espera receber, que neste caso é uma string, mas como forçamos a passagem de um inteiro, ele acusou o problema… Perfeito!

O segundo erro acusado refere-se ao método “sayHello()” que não foi encontrado, pois alteramos o seu nome para forçar o erro na análise.

Os demais erros, referem-se ao método “Response” que é um componente do Symfony Framework e não foi localizado, pois alteramos o “Response” para “JsonResponse”, um outro componente do mesmo framework, mas que neste caso, não atende às necessidades do código.

Conclusão:

Espero que com este artigo vocês possam incluir o PHPStan na sua stack de desenvolvimento PHP, bem como consigam usufruir de todas as funcionalidades dessa ferramenta incrível.

Para ver todos as possibilidades de uso, recomendo fortemente que visitem a página oficial do projeto no GitHub.

Forte abraço!