Um experimento realizado pela JetBrains mostrou que conceder aos agentes de inteligência artificial acesso direto ao mecanismo de refatoração do Rider pode mudar radicalmente a forma como as tarefas de C# são executadas, em vez de obrigar o agente a modificar textos e depois executar o compilador para descobrir o que as alterações danificaram. Em um teste que abrangeu 15 tarefas, o tempo mediano por tarefa caiu de 157,9 segundos para 26,6 segundos, uma melhoria de 83%, enquanto o número de chamadas de ferramentas caiu de 17 para 6,2 por tarefa.
Esse recurso está incluído em uma habilidade integrada chamada refactoring-code, disponível no Rider a partir da versão 2026.2.1. Segundo a JetBrains, o usuário não precisa ativá-la manualmente; o agente a invoca automaticamente quando recebe a solicitação de realizar uma refatoração de código C#. O mecanismo se baseia nas tecnologias do ReSharper e na infraestrutura analítica do Rider para compreender as relações entre símbolos e referências dentro do projeto.
O problema da abordagem de modificar e depois compilar
Antes da disponibilização da habilidade, a JetBrains observou um modelo avançado durante a execução das mesmas tarefas. Ao longo de 2.513 chamadas a diferentes ferramentas, o agente não realizou nenhuma operação de refatoração estrutural diretamente, pois não dispunha de uma ferramenta específica para isso. Em vez disso, usou comandos interativos para inserir textos 468 vezes, invocou o git 422 vezes e o sed 392 vezes, além de executar o dotnet build 163 vezes.
Isso não significa que o agente evitava operações de refatoração, mas que tentava aproximá-las por meio de pesquisa e edição textual, usando depois os resultados da compilação para avaliar o que havia acontecido. A JetBrains explica que renomear um símbolo, por exemplo, exige distinguir entre referências associadas a uma determinada definição, chamadas de métodos polimórficos, classes parciais, implementações explícitas de interfaces e referências de documentação. Essas relações não podem ser garantidas por uma expressão regular.
Em contrapartida, o mecanismo do Rider trabalha sobre uma árvore sintática resolvida que identifica a definição à qual cada identificador está associado, a versão invocada por cada chamada e os locais das referências em toda a solução de software. Assim, a parte estrutural da tarefa é transferida para o mecanismo, em vez de o agente redescobrir gradualmente essas relações por meio de ciclos repetidos de edição, compilação e leitura de erros.
O que a JetBrains mediu?
A avaliação se concentrou em oito operações com resultados claramente verificáveis:
- Renomear um símbolo e todas as suas referências.
- Extrair um conjunto de instruções para uma nova função.
- Extrair uma interface de um tipo existente.
- Extrair uma classe base e mover os membros para ela.
- Alterar a assinatura de uma API e atualizar os locais de chamada.
- Mover um tipo para outro namespace e corrigir as instruções using.
- Reorganizar os namespaces para corresponder à estrutura de pastas.
- Excluir um símbolo com segurança quando nenhuma outra parte depender dele.
As tarefas incluíram casos diretos e outros mais complexos, com um número maior de locais de chamada ou dependências interligadas. Os dois lados executaram o mesmo modelo, gpt-5.5, por meio do Codex CLI, aproximadamente dez vezes para cada tarefa. A única diferença foi a disponibilização ou não da habilidade refactoring-code. As comparações se basearam nos rastros registrados e em um teste de permutação pareado.
Resultados práticos e custo
Com a habilidade ativada, o número de operações de dotnet build caiu de 163 para apenas três, e o total de chamadas de ferramentas na avaliação caiu de 2.513 para 926. As edições textuais não desapareceram: o sed continuou sendo a ferramenta mais usada, mas a distribuição de funções mudou. As edições comuns permaneceram nas ferramentas de edição textual, enquanto o mecanismo assumiu as alterações estruturais cujos efeitos podem se estender a partes que o agente não vê diretamente.
O tempo no percentil 95 caiu de 346,4 para 56,9 segundos, uma melhoria associada principalmente ao desaparecimento dos casos presos no ciclo de edição, compilação e tratamento de erros. O custo mediano por tarefa caiu de 0,33 dólar para 0,12 dólar, e o custo por tarefa bem-sucedida caiu de 0,52 dólar para 0,19 dólar. O número de tokens de entrada também caiu de 436.745 para 208.524 por tarefa; as leituras da memória temporária, de 2.973.158 para 1.257.600; e as saídas, de 32.532 para 15.538.
O que isso significa para os usuários?
O experimento mostra que a utilidade das ferramentas de agentes não depende apenas da capacidade do modelo de produzir código, mas também do tipo de ferramentas que ele consegue invocar. Em oito das 15 tarefas, o lado equipado com a habilidade foi mais rápido e menos caro, sem usar um número maior de ferramentas, e os dois lados foram aprovados nos testes. As seis tarefas cuja execução demorava mais de dois minutos no modo básico melhoraram entre 82% e 94%.
Mas os resultados não representam um ganho abrangente para todos os casos. Os dois lados falharam em duas tarefas, o modo básico foi bem-sucedido em uma tarefa na qual o modo equipado com a habilidade não teve sucesso, enquanto quatro tarefas já eram tão rápidas que invocar o mecanismo do Rider não era economicamente útil. Portanto, os números demonstram a utilidade da habilidade em um conjunto específico de operações de refatoração, não garantem que toda tarefa melhorará na mesma proporção.
Para ilustrar a diferença, a JetBrains apresentou uma tarefa de extração de uma classe base do tipo ReportExporter. Sem a habilidade, a execução levou 336,7 segundos e 24 chamadas, com custo de 1,15 dólar, e incluiu vários ciclos de edição de arquivos e execução da compilação para tratar erros de herança, construtores e permissões de acesso. Com a habilidade, levou 19,8 segundos e três chamadas, com custo de 0,09 dólar; o agente executou a operação extract_base_class, criou ExporterBase, atualizou quatro arquivos e reescreveu 11 referências.
É possível experimentar o recurso atualizando o Rider para a versão 2026.2.1, abrindo uma solução C# e solicitando ao agente que renomeie um elemento, extraia uma interface ou mova um tipo. O artigo recomenda que as solicitações especifiquem o nome da operação, como pedir a extração de uma interface de OrderProcessor, em vez de usar uma formulação geral como “limpe esta classe”.