Depurar y refactorizar código con Cerewro

Pasa código roto a Cerewro y obtén el bug detectado, la causa raíz explicada en lenguaje sencillo y el código corregido. También refactoriza funciones complejas, añade tipado TypeScript, mejora el rendimiento y genera tests automáticamente.

Depurar errores con Cerewro

Prompt para depurar código
Este código JavaScript me da el error "TypeError: Cannot read properties of undefined (reading 'map')". Analiza el código, explica la causa y corrígelo:

[pega tu código aquí]
Cerewro detecta y corrige el bug
// ❌ Código original con bug
function renderUsers(data) {
  return data.users.map(u => `
  • ${u.name}
  • `).join(''); } renderUsers(null); // TypeError: Cannot read properties of null // ✅ Código corregido por Cerewro function renderUsers(data) { if (!data?.users?.length) return '
  • No hay usuarios
  • '; return data.users.map(u => `
  • ${u.name ?? 'Sin nombre'}
  • `).join(''); }

    Refactorizar código legacy

    Prompt para refactorizar
    Refactoriza este código PHP con callbacks anidados (callback hell) para usar async/await o Promises. Mantén la misma funcionalidad, mejora la legibilidad y añade manejo de errores con try/catch:
    
    [pega el código aquí]
    Ejemplo: callback hell → async/await
    // ❌ Antes: callbacks anidados
    getUser(id, (err, user) => {
      if (err) return handleError(err);
      getOrders(user.id, (err, orders) => {
        if (err) return handleError(err);
        getProducts(orders, (err, products) => {
          if (err) return handleError(err);
          renderPage(products);
        });
      });
    });
    
    // ✅ Después: async/await (generado por Cerewro)
    async function loadUserData(id) {
      try {
        const user     = await getUser(id);
        const orders   = await getOrders(user.id);
        const products = await getProducts(orders);
        renderPage(products);
      } catch (err) {
        handleError(err);
      }
    }

    Añadir tests automáticamente

    Generar tests unitarios con Jest
    Genera tests Jest completos para esta función JavaScript. Incluye casos: entrada normal, entrada vacía, valores límite, tipos incorrectos y errores esperados:
    
    function calcularDescuento(precio, porcentaje) {
      if (precio <= 0 || porcentaje < 0 || porcentaje > 100)
        throw new Error('Parámetros inválidos');
      return precio * (1 - porcentaje / 100);
    }
    Tests generados por Cerewro
    describe('calcularDescuento', () => {
      test('descuento normal', () => {
        expect(calcularDescuento(100, 20)).toBe(80);
      });
      test('0% descuento devuelve precio original', () => {
        expect(calcularDescuento(50, 0)).toBe(50);
      });
      test('100% descuento devuelve 0', () => {
        expect(calcularDescuento(100, 100)).toBe(0);
      });
      test('precio negativo lanza error', () => {
        expect(() => calcularDescuento(-10, 10)).toThrow('Parámetros inválidos');
      });
      test('porcentaje > 100 lanza error', () => {
        expect(() => calcularDescuento(100, 150)).toThrow('Parámetros inválidos');
      });
    });

    Añadir TypeScript a código JavaScript existente

    Migrar JS a TypeScript con Cerewro
    Convierte este archivo JavaScript a TypeScript: añade tipos a todas las funciones, crea interfaces para los objetos, usa generics donde sea apropiado y marca como optional los campos que pueden ser undefined:
    
    [pega el archivo .js aquí]
    Tip — Analizar rendimiento: Pega código lento y pide: "Analiza el rendimiento de este código, identifica los cuellos de botella y propón optimizaciones con Big O de cada función". Cerewro compara la complejidad antes y después de la optimización.