Lección 6 de 11
Composer y Edición Inteligente
Cursor: IDE Construido para IA
Más que VS Code con IA. Diseñado desde cero para desarrollo asistido.
Ventajas sobre VS Code + Copilot
- Chat con conocimiento de proyecto completo
- Edición multi-archivo simultánea
- Composer para cambios arquitectónicos
- Mejor contexto y memoria
- GPT-4, Claude, modelos locales
Cmd+K: Edición Inline
// Selecciona código + Cmd+K
// Antes:
function fetchUsers() {
fetch("/api/users")
.then(res => res.json())
.then(data => console.log(data));
}
// Prompt: "Convertir a async/await con error handling"
// Después:
async function fetchUsers() {
try {
const response = await fetch("/api/users");
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error("Error fetching users:", error);
throw error;
}
}Cmd+L: Chat Contextual
// Chat conoce TODO el proyecto
"¿Cómo funciona la autenticación?"
// → Analiza AuthContext, useAuth, API routes
"¿Qué componentes usan el hook useCart?"
// → Lista archivos y líneas específicas
"¿Tenemos tests para UserService?"
// → Muestra coverage y gapsComposer (Cmd+Shift+I)
Feature killer: cambios multi-archivo coordinados.
Ejemplo: Sistema de Roles
// Prompt en Composer:
"Agregar sistema de roles de usuario:
1. Prisma:
- Model Role (id, name, permissions)
- Relación User → Role
- Seed roles: admin, editor, viewer
2. Backend:
- tRPC middleware checkRole()
- Procedures protegidos por rol
3. Frontend:
- Hook useHasRole(roleName)
- Component ProtectedRoute
- UI conditional por rol
4. Tests:
- Tests middleware
- Tests hook
- E2E role enforcement"
// Cursor edita SIMULTÁNEAMENTE:
// ✓ schema.prisma
// ✓ seed.ts
// ✓ auth.middleware.ts
// ✓ user.router.ts
// ✓ useHasRole.tsx
// ✓ ProtectedRoute.tsx
// ✓ auth.test.ts
// ✓ e2e/roles.spec.ts
// Muestra diff de cada archivo
// Acepta/rechaza cambios individualesEjemplo: Feature Completa
// "Implementar sistema de favoritos:
// Backend:
// - Tabla favorites (userId, productId)
// - Endpoints: add, remove, list
// - Validar producto existe
// Frontend:
// - FavoriteButton component
// - useFavorites hook
// - Página MyFavorites
// - Optimistic updates
// Seguir patterns del proyecto existente"
// Cursor:
// 1. Analiza cómo se hacen features similares
// 2. Mantiene consistencia de estilo
// 3. Usa mismas herramientas (Prisma, tRPC)
// 4. Genera tests siguiendo patrón
// 5. Actualiza tipos TypeScriptTab Awareness
Cursor analiza archivos abiertos para contexto:
// Tabs abiertas:
// 1. types.ts (interface User)
// 2. UserService.ts
// 3. UserList.tsx
// En UserList escribes:
const handleDelete = async (userId) => {
// Cursor sugiere usando UserService de tab 2
await UserService.deleteUser(userId);
// Y con tipos de User de tab 1
}@-Mentions
// Chat con referencias específicas:
"@UserService.ts ¿cómo mejorar performance?"
"@schema.prisma @user.router.ts sincronizar estos"
"@src/components optimizar re-renders en carpeta completa".cursorrules
Configuración persistente del proyecto:
// .cursorrules en root
# Project Context
This is a Next.js 14 e-commerce with:
- TypeScript strict mode
- Prisma + PostgreSQL
- tRPC for API
- Tailwind for styles
# Code Style
- Functional programming (no classes)
- Arrow functions
- Explicit types (no any)
- async/await (no .then)
# Components
- Named exports
- Props interface above component
- PropTypes validation
- Accessibility required
# Testing
- Vitest for unit
- Playwright for e2e
- Coverage > 80%
# AI Instructions
- Always suggest tests
- Security-first approach
- Performance-conscious
- Mobile-responsive defaultCodebase Indexing
Cursor indexa proyecto completo:
// Preguntas sobre codebase:
"¿Dónde se define el schema de autenticación?"
// → Encuentra en múltiples archivos relacionados
"Muestra todos los usos de deprecated API"
// → Lista completa con contexto
"¿Qué archivos no tienen tests?"
// → Identifica gaps de coverageCmd+K Multi-Select
// Selecciona múltiples bloques (Cmd+D)
// Selecciona todas las funciones similares:
function createUser(data) { ... }
function createPost(data) { ... }
function createComment(data) { ... }
// Cmd+K: "Agregar try/catch y logging"
// Aplica a TODAS las funciones seleccionadasFlujos de Trabajo
Refactoring Grande
1. Cmd+L: "Analiza este componente"
2. Identificar issues
3. Composer: "Refactor siguiendo best practices"
4. Review changes
5. Cmd+K inline para ajustes
6. Tests automáticosNueva Feature
1. Composer: Descripción completa feature
2. Genera scaffolding multi-archivo
3. Cmd+L: Preguntas específicas
4. Cmd+K: Ajustes inline
5. Review y testBug Fix
1. Cmd+L: "Tengo este error [pegar]"
2. Cursor identifica archivo y línea
3. Sugiere fix
4. Cmd+K para aplicar
5. Genera regression testTips Pro
- .cursorrules: Define context una vez, Cursor lo recuerda
- Tabs abiertas: Más context = mejores sugerencias
- Composer para arquitectura: Cambios grandes coordinados
- Cmd+K para details: Ediciones pequeñas precisas
- @-mentions: Referencia archivos específicos
Limitaciones
- Requiere buenos specs para Composer
- Puede generar mucho código (review necesario)
- API costs con GPT-4 (usa límites)
- Learning curve vs autocomplete simple
Comparación
| Feature | Copilot | Cursor |
|---|---|---|
| Autocomplete | ✅ Excelente | ✅ Excelente |
| Chat | ✅ Bueno | ✅✅ Superior |
| Multi-archivo | ❌ | ✅✅ Composer |
| Context | Archivo actual | Proyecto completo |
| Modelos | Codex | GPT-4, Claude, etc |
Cursor = arquitectura y features complejas. Copilot = autocompletado rápido.