Foto de Matteo del Piano no Unsplash
No mundo em constante evolução do desenvolvimento PHP, manter sua base de código limpa, atualizada e eficiente é crucial. É aqui que o Reitor PHP entra em ação. Se você está se perguntando como usar o Rector PHP, como instalá-lo ou o que exatamente é o Rector PHP, este guia completo é para você. Orientaremos você no básico, forneceremos um tutorial detalhado do Rector PHP e ofereceremos insights sobre o PHP Rector e como usá-lo de maneira eficaz. Ao final deste artigo, você terá uma compreensão sólida do Rector PHP e como ele pode aprimorar seu fluxo de trabalho de desenvolvimento.
Rector foi iniciado em 2020, mas só teve sua versão 1.0 em 2024. É uma ferramenta de linha de comando que realiza uma análise estática de uma base de código. A partir dessa análise, alterações podem ser aplicadas. Eu acho que um bom exemplo disso seria se sua base de código estivesse repleta de chamadas array() quando isso agora é considerado uma prática antiga, agora substituída pela [] sintaxe de array curto.
Examinar uma base de código para substituir isso é entediante. Poderíamos usar uma ferramenta simples de localizar e substituir, mas e se houvesse um array() encapsulado em uma string ou dentro de um comentário que não deveria ser alterado? Agora precisamos verificar cada instância que substituímos.
Esse tipo de problema é o que Rector se destaca. Em vez disso, o Rector é capaz de examinar o código e saber definitivamente se é um array a ser substituído.
Você pode estar se perguntando, o PHP CS Fixer também pode fazer isso, o que é verdade. Mas o Rector também tem o PHPStan trabalhando nos bastidores não apenas para reconhecer a sintaxe, mas também para analisar tipos. Isso significa que o Rector pode detectar quando uma classe tem uma classe pai específica, quando uma variável é de um tipo específico ou qual é o tipo de retorno esperado de uma função. Dando-lhe um escopo muito maior para fazer alterações em massa em uma base de código.
Isso pode parecer óbvio para desenvolvedores PHP experientes, mas existem duas maneiras principais e realmente depende de como você deseja usar o Rector.
Se você deseja usar o Rector como parte da integração contínua, faz sentido instalar o Rector diferente em seus projetos através do compositor.
composer require --dev rector/rector
Mas se você quiser experimentar o Rector em um único ou vários projetos para realizar atualizações, talvez seja melhor instalar o Rector globalmente usando
composer global require rector/rector
Qualquer etapa que você escolher, a próxima etapa será criar uma configuração no diretório raiz de um projeto e incluir todas as pastas contendo o código PHP que você deseja atualizar. Isso não inclui a pasta do fornecedor, é claro, pois não queremos modificá-la.
Esta é a aparência de uma configuração para, digamos, um projeto Laravel:
use Rector\Config\RectorConfig; use Rector\Php71\Rector\List_\ListToArrayDestructRector; return RectorConfig::configure() ->withPaths([__DIR__. '/config', __DIR__. '/src', __DIR__. '/tests', __DIR__. '/routes']) ->withImportNames(removeUnusedImports: true);
Como na última seção, o uso do Rector pode ser determinado pela forma como você deseja usá-lo. O Reitor aplica alterações através das seleções de Regras. É o mesmo que PHP CS Fixer. Essas regras detectarão o problema e tentarão corrigi-lo para o qual foram projetadas.
Se quisermos usar o Rector de forma de integração contínua, porque queremos fazer com que todo o código seja o mais otimizado possível à medida que o desenvolvemos, podemos usar apenas um determinado conjunto de regras.
Rector tem conjuntos de regras, muitas vezes descritos como Código Morto ou Qualidade de Código, que remove código ou aprimora e otimiza respectivamente. É bastante vantajoso manter apenas esses conjuntos, pois podemos ter certeza de que funcionam na maior parte do tempo. Mas você deve estar absolutamente ciente de que a maneira como o Rector escreve o código nunca é perfeita. Freqüentemente, quando as regras são escritas, elas podem cobrir os cenários típicos e podem perder algumas circunstâncias encontradas em sua base de código. Isso pode levar a código quebrado.
Caso queira usar o Rector, você deve absolutamente ter testes escritos para sua aplicação. Sem eles, o Rector pode facilmente levar à introdução de bugs que você não descobrirá até que seja um problema.
Outra coisa a considerar ao usar o Rector é que você deve usar uma ferramenta de linting como o PHP CS Fixer. O Rector não olha para os espaços em branco, os espaços e as novas linhas entre as chamadas de método e seus argumentos, etc. O uso de uma ferramenta linting deve manter a formatação do código no padrão esperado após o Rector aplicar suas correções.
Tutorial passo a passo do Reitor PHP
use Rector\Config\RectorConfig; use Rector\Php71\Rector\List_\ListToArrayDestructRector; return RectorConfig::configure() ->withPaths([__DIR__. '/config', __DIR__. '/src', __DIR__. '/tests', __DIR__. '/routes']) ->withImportNames(removeUnusedImports: true) ->withRules([ ListToArrayDestructRector::class, ]);No caso desta configuração vamos fazer uma substituição do uso de list para que em vez disso utilizemos reestruturação de array. As mudanças que esperamos fazer são as seguintes:
use Rector\Config\RectorConfig; use Rector\Php71\Rector\List_\ListToArrayDestructRector; return RectorConfig::configure() ->withPaths([__DIR__. '/config', __DIR__. '/src', __DIR__. '/tests', __DIR__. '/routes']) ->withImportNames(removeUnusedImports: true) ->withRules([ ListToArrayDestructRector::class, ]);Agora podemos testar esta configuração realizando uma simulação do Rector.
use Rector\Config\RectorConfig; use Rector\Php71\Rector\List_\ListToArrayDestructRector; return RectorConfig::configure() ->withPaths([__DIR__. '/config', __DIR__. '/src', __DIR__. '/tests', __DIR__. '/routes']) ->withImportNames(removeUnusedImports: true) ->withRules([ ListToArrayDestructRector::class, ]);Se tudo tiver dado certo, devemos ver agora uma saída que contém uma comparação de todas as alterações em cada arquivo, com uma lista das regras que fizeram as alterações. Nossa configuração lista apenas uma regra, portanto, apenas uma regra é aplicada, mas se mais regras forem adicionadas, veremos uma lista de uma ou mais aqui.
Este é um ótimo momento para revisar as alterações e garantir que a regra esteja funcionando conforme o esperado. Quando estivermos felizes, poderemos dirigir o Rector novamente. Sem o sinalizador de simulação, as alterações serão gravadas nos arquivos.
use Rector\Config\RectorConfig; use Rector\Php71\Rector\List_\ListToArrayDestructRector; return RectorConfig::configure() ->withPaths([__DIR__. '/config', __DIR__. '/src', __DIR__. '/tests', __DIR__. '/routes']) ->withImportNames(removeUnusedImports: true) ->withRules([ ListToArrayDestructRector::class, ]);Depois de concluído, devemos executar nossa ferramenta linting favorita e, em seguida, executar nossos testes. É isso. Agora usamos o Rector.
Conclusão: Impulsionando seu desenvolvimento PHP com Rector
Se você quiser aprofundar seu conhecimento sobre o Rector, sugiro acessar https://getrector.com/.
Sou Peter Fox, desenvolvedor de software no Reino Unido que trabalha com Laravel. Obrigado por ler meu artigo, tenho muito mais para ler em https://articles.peterfox.me. Agora também sou patrocinador no GitHub. Se você quiser me encorajar a escrever mais artigos como este, considere fazer uma pequena doação única.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3