Saltar al contenido principal

IA para Revisar Pull Requests: CodeRabbit, Copilot y Cómo Usarlos Bien

Cómo uso IA para revisar Pull Requests en proyectos reales: CodeRabbit, GitHub Copilot PR review y revisión manual asistida. Qué detectan, qué se les escapa y cómo integrarlos en tu flujo.

Fran Cobos 10 min de lectura 1906 palabras

Tabla de contenidos

Un PR de 800 líneas llega a tu repo. El autor lo marca como “pequeño refactor”. Tienes 15 minutos antes de la siguiente reunión. ¿Lo apruebas sin leer o lo dejas pendiente?

Esta es la situación real en la que la IA para revisar PRs tiene más valor. No para reemplazar la revisión — para que cuando llegues al PR, los problemas obvios ya estén identificados y puedas focalizarte en lo que realmente importa.

Por qué la revisión de PRs es un cuello de botella

En equipos pequeños, la revisión de código es una de las tareas más importantes y más descuidadas. El motivo es simple: es costosa en tiempo y atención.

Revisar bien un PR de 500 líneas requiere:

  • Entender el contexto del cambio
  • Seguir la lógica de cada función modificada
  • Pensar en edge cases
  • Verificar que los tests son suficientes
  • Detectar problemas de seguridad

Eso son 30-60 minutos por PR. En proyectos activos con varios PRs al día, la revisión se convierte en un cuello de botella o, peor, en una formalidad que no añade valor real.

La IA no resuelve esto completamente. Pero sí elimina el trabajo mecánico de detectar los problemas más obvios, para que tú puedas centrarte en los que realmente requieren criterio humano.


Herramientas principales

CodeRabbit

CodeRabbit es el más maduro del ecosistema. Se instala como GitHub App y revisa automáticamente cada PR que se abre o actualiza.

Qué hace bien:

  • Resumen automático de los cambios en lenguaje natural
  • Comentarios inline en líneas específicas del diff
  • Detección de bugs potenciales y code smells
  • Sugerencias de mejora con código de ejemplo
  • Diagrama de flujo del walkthrough de cambios
  • Revisión de tests — avisa si un cambio no tiene test asociado

Cómo se ve en práctica:

Cuando abres un PR con CodeRabbit instalado, en los primeros minutos aparece un comentario con:

## Summary
This PR adds the campaign creation endpoint with multi-tenant support.

## Walkthrough
- `CampaignController` (+80 lines): New POST /campaigns endpoint
- `CampaignService` (+120 lines): createCampaign() with tenant isolation
- `create-campaign.dto.ts` (+35 lines): Validation with class-validator

## Potential Issues
⚠️ Line 45 in campaign.service.ts: The query doesn't filter by tenantId.
   Campaigns from other tenants could be exposed.

⚠️ Line 23 in campaign.controller.ts: No rate limiting on this endpoint.
   Could be abused for enumeration attacks.

El primer punto es exactamente el tipo de error de seguridad crítico que en una revisión rápida podría pasar desapercibido.

Configuración recomendada (.coderabbit.yaml en la raíz del repo):

language: "es"
reviews:
  profile: "chill"  # assertive | chill — chill es menos ruidoso
  request_changes_workflow: false
  high_level_summary: true
  poem: false  # Desactiva el poema al final (es una feature, en serio)
  review_status: true
  collapse_walkthrough: true
  path_filters:
    - "!dist/**"
    - "!node_modules/**"
    - "!*.lock"
    - "!*.min.js"
chat:
  auto_reply: true

Coste: Gratis para repos públicos. Para repos privados, el plan gratuito incluye 50 reviews/mes. El plan Pro es $12/usuario/mes.


GitHub Copilot Code Review

GitHub Copilot tiene una función de revisión de código integrada directamente en la interfaz de PRs. A diferencia de CodeRabbit (automático), Copilot review se activa manualmente.

Cómo activarlo:

En cualquier PR, en la pestaña “Files changed”, hay un botón de Copilot en la esquina superior derecha. Al pulsarlo, Copilot analiza todos los cambios y añade comentarios inline.

Qué hace bien:

  • Review interactivo — puedes hacerle preguntas sobre su propio comentario
  • Entiende el contexto del repo si tienes @workspace configurado
  • Mejor en sugerencias de refactor que en detección de seguridad
  • Genera sugerencias de código con un botón “Accept suggestion”

Lo que falta respecto a CodeRabbit:

  • No es automático — alguien tiene que activarlo en cada PR
  • No genera el resumen de alto nivel del PR completo
  • Menos especializado en seguridad

Mejor uso de Copilot para PRs: Como complemento a la revisión humana. Cuando estás en el PR leyendo el diff y tienes dudas, puedes preguntarle directamente:

"¿Este cambio en el TenantContextGuard puede afectar a los endpoints que no usan el guard?"
"¿Hay edge cases que no estamos manejando en este try/catch?"
"¿Los tests cubren el caso en que el tenantId es undefined?"

Revisión asistida manual (sin herramienta de PR)

Si no usas CodeRabbit ni tienes Copilot Business, puedes hacer revisión asistida copiando el diff al chat de Claude o ChatGPT.

El prompt que uso:

Eres un senior developer revisando un Pull Request.
El proyecto es [descripción breve: NestJS multi-tenant SaaS con RBAC].
Las convenciones son: [listar las más relevantes].

Revisa este diff y dame:
1. Problemas críticos (bugs, seguridad, pérdida de datos)
2. Problemas medios (rendimiento, mantenibilidad)
3. Sugerencias menores (estilo, naming)

Para cada problema: línea, descripción, sugerencia de fix.

[DIFF AQUÍ]

Es manual pero funciona bien para PRs que no pasan por un repo con CodeRabbit configurado.


Qué detecta la IA y qué no

Detecta bien

Bugs de lógica simple:

// La IA detecta esto
if (user.role === "admin" || "superadmin") {
  // Siempre true — "superadmin" es truthy
}

// Y sugiere esto
if (user.role === "admin" || user.role === "superadmin") {

Problemas de seguridad por patrón:

// Detecta inyección SQL por interpolación
const sql = `SELECT * FROM users WHERE id = ${userId}`;

// Detecta credenciales hardcodeadas
const apiKey = "sk-proj-123abc...";

// Detecta CORS demasiado permisivo
app.use(cors({ origin: "*" }));

Code smells:

  • Funciones demasiado largas
  • Duplicación de código
  • Nombres de variables poco descriptivos
  • Comentarios desactualizados

Tests insuficientes:

  • Funciones sin test correspondiente
  • Tests que no cubren el caso de error
  • Mocks vacíos que no prueban nada

No detecta (o detecta mal)

Vulnerabilidades de lógica de negocio:

// La IA NO siempre detecta esto si no entiende el modelo de datos
async getCampaigns(tenantId: string, userId: string) {
  // Falta validar que userId pertenece a tenantId
  return this.campaignRepo.find({ where: { tenantId } });
}

La IA no sabe que en tu sistema un userId puede pertenecer a otro tenant. Necesita conocer el modelo de negocio para detectarlo.

Problemas de rendimiento no obvios:

// La IA no detecta N+1 queries en ORMs complejos
const orders = await Order.findAll();
for (const order of orders) {
  order.items = await OrderItem.findAll({ where: { orderId: order.id } }); // N+1
}

Algunos detectores lo pillan, otros no. Depende de lo explícito que sea el patrón.

Errores de integración entre servicios: Si un cambio en el servicio A rompe el servicio B porque dependen de un contrato implícito, la IA solo lo detecta si tiene contexto de ambos servicios.

Condiciones de carrera:

// Parece correcto, pero tiene race condition en alta concurrencia
const exists = await this.userRepo.findOne({ where: { email } });
if (!exists) {
  await this.userRepo.save({ email, ... }); // Otro hilo puede crear el mismo email aquí
}

Flujo de trabajo con IA en la revisión de PRs

Este es mi flujo cuando tengo CodeRabbit + Copilot en el proyecto:

1. PR abierto

2. CodeRabbit revisa automáticamente (2-5 min)

3. Leer el resumen de CodeRabbit
   - ¿Hay críticos? → resolver antes de revisión humana
   - ¿Solo sugerencias? → continuar

4. Revisión humana focalizada:
   - Lógica de negocio (lo que la IA no entiende)
   - Cambios en auth/seguridad
   - Impacto en otras partes del sistema

5. Preguntas a Copilot inline para dudas concretas

6. Aprobar o solicitar cambios

El resultado: reviews que antes me tomaban 45 minutos ahora me toman 15-20. No porque revise menos — sino porque no gasto tiempo en los problemas que la IA ya identificó.


Configurar Copilot para que entienda tu proyecto

La calidad del review de Copilot mejora mucho si tiene contexto del proyecto. Usa el archivo de instrucciones:

<!-- .github/copilot-instructions.md -->
# Instrucciones para Copilot

## Contexto del proyecto
- NestJS 11 multi-tenant SaaS
- Cada request tiene req.user.tenantId (inyectado por TenantContextGuard)
- TODAS las queries deben filtrar por tenantId — si no lo hacen, es un bug crítico
- RBAC con @RequirePermissions() — todos los endpoints protegidos lo necesitan

## Al revisar código, prioriza:
1. Falta de filtro por tenantId en queries → Bug crítico de seguridad
2. Endpoints sin @RequirePermissions → Escalada de privilegios
3. DTOs sin validación con class-validator → Input no validado
4. any en TypeScript → Riesgo de runtime errors

Este archivo también mejora el autocompletado y las respuestas de Copilot en general, no solo en revisiones. Lo cuento en cómo sacar el máximo a GitHub Copilot.


Revisión de PRs generados por IA

Si usas vibe coding y el agente genera PRs completos, la revisión de IA es especialmente útil — no para sustituir tu revisión, sino para tener una segunda “opinión” sobre el código que la IA generó.

El patrón que funciona: un modelo revisa lo que generó otro modelo. CodeRabbit (basado en Claude) revisando código generado por Cursor (también Claude) parece redundante, pero en la práctica el review model tiene más contexto del proyecto y detecta inconsistencias que el generation model ignoró.

# El agente generó el módulo → abres PR → CodeRabbit revisa
# Resultado habitual: 2-3 puntos que el agente pasó por alto

# Los más comunes:
# - Falta filter por tenantId (el agente olvida el contexto de multi-tenancy)
# - Test no cubre el caso de error 404
# - Import innecesario que quedó del código anterior

Métricas: ¿funciona realmente?

En proyectos donde he tenido CodeRabbit configurado durante varios meses:

  • ~30% de los PRs tenían al menos un comentario de CodeRabbit que resultó en un cambio real
  • ~8% de los PRs tenían un problema detectado por CodeRabbit que se hubiera ido a producción sin la revisión automática
  • Los problemas más frecuentes detectados: queries sin filtro de tenant (2 veces), tests insuficientes (5 veces), código duplicado que debería haberse refactorizado (4 veces)

No es perfecto. Pero el 8% de PRs con bugs reales detectados antes de producción tiene un ROI clarísimo.


Alternativas y complementos

HerramientaEspecialidadPrecio
CodeRabbitReview automático completoGratis / $12/usuario
GitHub CopilotReview interactivo$10-19/usuario
SourceryRefactor y code qualityGratis / $14/usuario
DeepSourceAnálisis estático + IAGratis / $12/usuario
SnykSeguridad y vulnerabilidadesGratis / desde $25
SonarQubeCalidad y deuda técnicaGratis (self-hosted)

Para proyectos pequeños o en solitario: CodeRabbit gratuito + Copilot Pro es suficiente. Para equipos: CodeRabbit Pro + Copilot Business + Snyk para seguridad.


Conclusión

La IA para revisión de PRs no reemplaza al revisor humano — elimina el ruido para que el revisor humano pueda focalizarse en lo que importa.

Configura CodeRabbit en tu repo (es gratuito para empezar), ajusta el .coderabbit.yaml para reducir el ruido, y úsalo como primera capa de revisión. Reserva tu atención para la lógica de negocio, los cambios de arquitectura y los edge cases que solo tú puedes evaluar.

Y si generas código con IA, combinarlo con un revisor IA es el mínimo que puedes hacer antes de mergear a producción. Los problemas que la IA generadora pasó por alto, la IA revisora los puede pillar — especialmente si usas MCP servers para que el revisor tenga contexto real del proyecto.

Fran Cobos

Fran Cobos

Desarrollador Full Stack especializado en IA aplicada, automatización y desarrollo web. Escribo sobre herramientas, tutoriales y casos reales para programadores.

¿Necesitas desarrollo a medida?

Apps web, IA, módulos ERP — cuéntame tu proyecto.