Yeda AI Tips · #102

English

¿Refactor grande? Escribe un codemod, no ediciones a mano

Cuando un refactor toca cientos de líneas, deja de editar a mano. Las ediciones manuales a esa escala son propensas a errores y agotadoras de revisar: vas a omitir casos, y tus revisores no pueden confiar en un diff de 500 líneas de "el mismo cambio, probablemente, en todas partes". Escribe la transformación en su lugar — un codemod, un script sed o una reescritura de AST — y el cambio se vuelve mecánico, uniforme y revisable.

Por qué las ediciones a mano fallan a escala

Un refactor como "renombra esta API", "cambia este import" o "modifica la firma de esta llamada" es una decisión aplicada N veces. Cuando N es 5, tu editor alcanza. Cuando N es 500:

Una transformación con script invierte los tres puntos: la cobertura es lo que tu patrón matchea, cada cambio es idéntico por construcción, y el revisor lee la transformación de ~20 líneas, no la salida de 500.

Elige la herramienta más liviana que siga siendo correcta

El cambio se parece aUsaPor qué
String exacto, sin riesgo de sintaxissed / reemplazo multi-archivo del editorLo más rápido; sirve cuando un falso match es imposible
Patrón con llaves balanceadas, muchos lenguajesCombyMatch estructural sin escribir código de parser
Buscar/reemplazar consciente de la sintaxis, en una líneaast-grepPatrón + rewrite sobre el AST, desde la CLI
Transformación JS/TS con lógicajscodeshiftAcceso programático completo al AST, preserva el estilo vía recast
Transformación en Python que preserva comentarios/formatoLibCST codemodsÁrbol de sintaxis concreta sin pérdidas
Migración de frameworks Java/JVMOpenRewriteRecetas empaquetadas sobre árboles semánticos sin pérdidas

Regla práctica: escala solo cuando la herramienta más simple pueda producir un falso match. Texto → patrón estructural → programa completo sobre el AST.

Cómo se ve

Una línea consciente de la sintaxis con ast-grep — reescribir declaraciones var a let en un repo TypeScript:

ast-grep --pattern 'var code = $PATTERN' \
         --rewrite 'let code = new $PATTERN' \
         --lang ts

Cuando necesitas lógica, una transformación de jscodeshift es una función JS pequeña; córrela primero en seco:

jscodeshift -t rename-api.js src/ --dry --print   # preview
jscodeshift -t rename-api.js src/                 # apply

En ambos casos, el artefacto que commiteas junto al diff es la transformación. Eso es lo que se revisa.

La recompensa en la revisión

Entrega el refactor como dos cosas: el script, y un commit que es puramente su salida. El revisor verifica la regla una vez, hace spot-checks de algunas aplicaciones y confía en el resto — porque una máquina aplicó una regla de manera uniforme. Es una garantía fundamentalmente más fuerte que 500 pulsaciones cuidadosas, y se puede re-ejecutar cuando la rama queda desactualizada: rebase, re-ejecuta el codemod, listo.

Trucos avanzados

Recursos

Read this article in English

¿Construyendo una funcionalidad con IA? Yeda AI diseña, audita y entrega sistemas LLM de producción.

Habla con nosotros · Lee el blog