"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Dominando a refatoração de código: um guia completo para usar o Rector PHP

Dominando a refatoração de código: um guia completo para usar o Rector PHP

Publicado em 30/08/2024
Navegar:849

Mastering Code Refactoring: A Complete Guide to Using Rector PHP
Foto de Matteo del Piano no Unsplash

Introdução ao Reitor PHP

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.

O que é Reitor PHP?

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.

Como instalar o Reitor PHP

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);

Reitor de PHP: como usá-lo de maneira eficaz

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

Agora que instalamos o Rector e estamos prontos para testá-lo, vamos tentar aplicar uma regra. Vamos começar atualizando nosso arquivo de configuração que criamos anteriormente.


use Rector\Config\RectorConfig; usar Rector\Php71\Rector\List_\ListToArrayDestructRector; retornar RectorConfig::configure() ->withPaths([__DIR__. '/config', __DIR__. '/src', __DIR__. '/testes', __DIR__. '/routes']) ->withImportNames(removeUnusedImports: true) ->comRegras([ ListToArrayDestructRector::classe, ]);
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:


-lista($a, $b) = ['a', 'b']; [$a, $b] = ['a', 'b'];
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.


reitor --ensaio
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.

Mastering Code Refactoring: A Complete Guide to Using Rector PHP

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.


reitor
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

Rector PHP é uma ferramenta poderosa que pode aprimorar significativamente seu fluxo de trabalho de desenvolvimento de PHP, automatizando a refatoração de código e garantindo que sua base de código permaneça limpa e moderna. Ao entender o que é Rector PHP, aprender como instalá-lo e dominar como usá-lo de maneira eficaz, você pode aproveitar seus recursos para agilizar atualizações de código, melhorar a qualidade do código e reduzir o risco de o código parecer um projeto “legado”. Esteja você integrando o Rector em seu pipeline de integração contínua ou usando-o para atualizações de base de código em grande escala, o Rector é um ativo indispensável para qualquer desenvolvedor PHP que busca manter um alto padrão de excelência de código.

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.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/peter_fox/mastering-code-refactoring-a-complete-guide-to-using-rector-php-hp1?1 Se houver alguma violação, entre em contato com study_golang@163 .com para excluí-lo
Tutorial mais recente Mais>

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