refactor
Faz seu agente refatorar o código para torná-lo melhor e mais fácil de manter. Ele pode renomear variáveis, extrair funções e melhorar a clareza sem mudar o que o código faz.
O que ela faz
Essa ferramenta ajuda a organizar e melhorar o código de programação sem mudar o que ele faz. É como arrumar a casa para que fique mais fácil de morar e consertar depois.
Quando usar
- ✓Quando o código está difícil de entender.
- ✓Se uma função ou parte do código está muito grande.
- ✓Quando você quer deixar o código mais limpo e fácil de manter.
Exemplo do que pedir para a IA
“Pode me ajudar a organizar este código para que fique mais fácil de ler?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
A IA analisa seu código e sugere ou aplica mudanças para torná-lo mais claro. Ela pode dividir funções grandes, dar nomes melhores para as coisas ou agrupar informações relacionadas.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add github/awesome-copilot --skill refactorOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/refactor/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Refatoração
Visão Geral
Melhore a estrutura e a legibilidade do código sem alterar o comportamento externo. Refatoração é uma evolução gradual, não uma revolução. Use isso para melhorar código existente, não para reescrever do zero.
Quando Usar
Use esta habilidade quando:
- O código é difícil de entender ou manter
- Funções/classes são muito grandes
- "Code smells" precisam ser corrigidos
- Adicionar funcionalidades é difícil devido à estrutura do código
- O usuário pede "limpe este código", "refatore isto", "melhore isto"
Princípios de Refatoração
As Regras de Ouro
- O comportamento é preservado - Refatoração não muda o que o código faz, apenas como
- Pequenos passos - Faça mudanças minúsculas, teste após cada uma
- Controle de versão é seu amigo - Commite antes e depois de cada estado seguro
- Testes são essenciais - Sem testes, você não está refatorando, está editando
- Uma coisa de cada vez - Não misture refatoração com mudanças de funcionalidade
Quando NÃO Refatorar
- Code that works and won't change again (if it ain't broke...)
- Critical production code without tests (add tests first)
- When you're under a tight deadline
- "Just because" - need a clear purpose
"Code Smells" Comuns e Correções
1. Método/Função Longa
# BAD: 200-line function that does everything
- async function processOrder(orderId) {
- // 50 lines: fetch order
- // 30 lines: validate order
- // 40 lines: calculate pricing
- // 30 lines: update inventory
- // 20 lines: create shipment
- // 30 lines: send notifications
- }
# GOOD: Broken into focused functions
+ async function processOrder(orderId) {
+ const order = await fetchOrder(orderId);
+ validateOrder(order);
+ const pricing = calculatePricing(order);
+ await updateInventory(order);
+ const shipment = await createShipment(order);
+ await sendNotifications(order, pricing, shipment);
+ return { order, pricing, shipment };
+ }
2. Código Duplicado
# BAD: Same logic in multiple places
- function calculateUserDiscount(user) {
- if (user.membership === 'gold') return user.total * 0.2;
- if (user.membership === 'silver') return user.total * 0.1;
- return 0;
- }
-
- function calculateOrderDiscount(order) {
- if (order.user.membership === 'gold') return order.total * 0.2;
- if (order.user.membership === 'silver') return order.total * 0.1;
- return 0;
- }
# GOOD: Extract common logic
+ function getMembershipDiscountRate(membership) {
+ const rates = { gold: 0.2, silver: 0.1 };
+ return rates[membership] || 0;
+ }
+
+ function calculateUserDiscount(user) {
+ return user.total * getMembershipDiscountRate(user.membership);
+ }
+
+ function calculateOrderDiscount(order) {
+ return order.total * getMembershipDiscountRate(order.user.membership);
+ }
3. Classe/Módulo Grande
# BAD: God object that knows too much
- class UserManager {
- createUser() { /* ... */ }
- updateUser() { /* ... */ }
- deleteUser() { /* ... */ }
- sendEmail() { /* ... */ }
- generateReport() { /* ... */ }
- handlePayment() { /* ... */ }
- validateAddress() { /* ... */ }
- // 50 more methods...
- }
# GOOD: Single responsibility per class
+ class UserService {
+ create(data) { /* ... */ }
+ update(id, data) { /* ... */ }
+ delete(id) { /* ... */ }
+ }
+
+ class EmailService {
+ send(to, subject, body) { /* ... */ }
+ }
+
+ class ReportService {
+ generate(type, params) { /* ... */ }
+ }
+
+ class PaymentService {
+ process(amount, method) { /* ... */ }
+ }
4. Lista de Parâmetros Longa
# BAD: Too many parameters
- function createUser(email, password, name, age, address, city, country, phone) {
- /* ... */
- }
# GOOD: Group related parameters
+ interface UserData {
+ email: string;
+ password: string;
+ name: string;
+ age?: number;
+ address?: Address;
+ phone?: string;
+ }
+
+ function createUser(data: UserData) {
+ /* ... */
+ }
# EVEN BETTER: Use builder pattern for complex construction
+ const user = UserBuilder
+ .email('test@example.com')
+ .password('secure123')
+ .name('Test User')
+ .address(address)
+ .build();
5. Inveja de Funcionalidade (Feature Envy)
# RUIM: Método que usa mais dados de outro objeto do que os seus próprios
- class Pedido {
- calcularDesconto(usuario) {
- if (usuario.nivelAssinatura === 'ouro') {
+ return this.total * 0.2;
+ }
+ if (usuario.idadeConta > 365) {
+ return this.total * 0.1;
+ }
+ return 0;
+ }
+ }
# BOM: Mova a lógica para o objeto que possui os dados
…
Perguntas frequentes
O código vai parar de funcionar?
Não, o objetivo principal é que o código continue funcionando exatamente da mesma forma. Apenas a organização interna muda.
Isso é o mesmo que reescrever o código?
Não, refatorar é fazer pequenas melhorias em um código que já funciona, enquanto reescrever é criar tudo de novo.
Preciso saber programar para usar?
Sim, esta ferramenta é para quem já escreve código e quer melhorá-lo.
Detalhes
Descrição original do autor
Surgical code refactoring to improve maintainability without changing behavior. Covers extracting functions, renaming variables, breaking down god functions, improving type safety, eliminating code smells, and applying design patterns. Less drastic than repo-rebuilder; use for gradual improvements.
repo: github/awesome-copilot
Popularidade
- Estrelas no GitHub
- 40 mil
- Posição no ranking
- #5339
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
acquire-codebase-knowledge
Ajuda seu agente a entender e documentar um projeto de código existente. É útil para novas pessoas entrarem no projeto ou para ter uma visão geral da arquitetura.
github/awesome-copilot
acreadiness-assess
Faz seu agente avaliar a prontidão de um projeto para IA e gerar um relatório. É útil para entender o quão bem um projeto está preparado para usar ferramentas de IA.
github/awesome-copilot
acreadiness-generate-instructions
Ajuda seu agente a criar instruções para ferramentas de IA baseadas em uma avaliação. É útil para melhorar a forma como a IA interage com o código e fecha lacunas identificadas.
github/awesome-copilot
acreadiness-policy
Faz seu agente ajudar a definir ou aplicar políticas para avaliação de projetos de IA. É útil para padronizar a forma como os projetos são avaliados e garantir conformidade.
github/awesome-copilot
Skills parecidas
benchmark-optimization-loop
Faz seu agente melhorar a velocidade de algo de forma medida. Ele testa várias versões e escolhe a mais rápida que ainda funciona corretamente.
affaan-m/ECC
change-impact
Ajuda seu agente a analisar o impacto de mudanças no código antes de fazê-las. Ele compara o planejado com o real depois, cobrindo caminhos, dados, testes e documentação. É útil para mudanças arriscadas ou que afetam várias partes do sistema.
affaan-m/ECC
click-path-audit
Faz seu agente rastrear todos os botões e interações do usuário para achar bugs. Ele encontra problemas onde funções parecem funcionar sozinhas, mas falham juntas. Útil quando bugs persistem mesmo após depuração.
affaan-m/ECC