Pular para o conteúdo
Skillpedia
Código em geral40 mil · #5339

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

https://github.com/github/awesome-copilot/blob/main/skills/refactor/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/github/awesome-copilot/blob/main/skills/refactor/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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 refactor

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/refactor/SKILL.md -o SKILL.md
Conteú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

  1. O comportamento é preservado - Refatoração não muda o que o código faz, apenas como
  2. Pequenos passos - Faça mudanças minúsculas, teste após cada uma
  3. Controle de versão é seu amigo - Commite antes e depois de cada estado seguro
  4. Testes são essenciais - Sem testes, você não está refatorando, está editando
  5. 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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas