You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A medida que el proyecto creció y se hicieron múltiples refactorings para
alcanzar 100 % de cobertura unitaria, se detectaron problemas recurrentes de
calidad de código:
Uso extendido de any: muchas funciones y variables usaban any,
lo que anulaba las ventajas de TypeScript. Los errores de tipo solo se
descubrían en runtime o en tests E2E lentos, no en tiempo de compilación.
Falta de linter configurado: no había un ESLint estructurado; cada
archivo seguía convenciones diferentes.
Inconsistencia en estilo: algunos archivos usaban ;, otros no;
la indentación variaba entre archivos.
Código generado por herramientas con estilo diferente: Playwright
codegen genera código con ; (semicolons), pero la convención del
proyecto es omitirlos.
Perfil del desarrollador
El mantenedor principal viene de Python, donde:
No existen los ; al final de sentencia
La legibilidad sin ruido sintáctico es un valor
El formateo lo resuelve una sola herramienta (black / ruff format)
En el entorno laboral se usa ; por convención de equipo. En este proyecto
personal, la preferencia es omitir semicolons para mantener el código
más limpio y cercano al estilo natural del autor.
Decisiones tomadas
1. Prohibir any — @typescript-eslint/no-explicit-any: warn
Se activó la regla @typescript-eslint/no-explicit-any en nivel warn
(no error para no bloquear builds durante el refactoring gradual).
Refactoring realizado:
Se reemplazaron todos los any del código fuente con tipos explícitos:
Tipos de colección de Astro (CollectionEntry<CollectionKey>)
any en tests
Objetos tipados con interfaces de mock
Resultado: cero any en el código fuente (src/). El único eslint-disable para no-explicit-any que queda está en cypress/e2e/stubs.ts,
que es código legacy pendiente de eliminación.
Regla en copilot-instructions.md:
-**Types:** Avoid `any` type; always define custom types or interfaces
Esto asegura que Copilot tampoco genere código con any.
2. Omitir semicolons — convención sin enforcement automático
Decisión: omitir ; al final de sentencias en todo el código del
proyecto.
Estado actual: la convención está documentada en copilot-instructions.md
pero no está enforceada por ESLint ni por un formateador automático. Esto
es intencional mientras se evalúan las opciones (ver sección de formateo
abajo).
Excepción conocida: el código generado por npx playwright codegen
incluye ; automáticamente. El flujo de trabajo esperado es:
Generar código con playwright codegen
Copiar al test
Eliminar ; manualmente o con un futuro autofix
3. Indentación a 2 espacios — enforceada
'indent': ['error',2,{SwitchCase: 1}]
Esta regla sí está enforceada a nivel error y se aplica con --fix.
Verificaciones preliminares
Solicitud de mejora en sitio web
Contexto
A medida que el proyecto creció y se hicieron múltiples refactorings para
alcanzar 100 % de cobertura unitaria, se detectaron problemas recurrentes de
calidad de código:
any: muchas funciones y variables usabanany,lo que anulaba las ventajas de TypeScript. Los errores de tipo solo se
descubrían en runtime o en tests E2E lentos, no en tiempo de compilación.
archivo seguía convenciones diferentes.
;, otros no;la indentación variaba entre archivos.
codegen genera código con
;(semicolons), pero la convención delproyecto es omitirlos.
Perfil del desarrollador
El mantenedor principal viene de Python, donde:
;al final de sentenciablack/ruff format)En el entorno laboral se usa
;por convención de equipo. En este proyectopersonal, la preferencia es omitir semicolons para mantener el código
más limpio y cercano al estilo natural del autor.
Decisiones tomadas
1. Prohibir
any—@typescript-eslint/no-explicit-any: warnSe activó la regla
@typescript-eslint/no-explicit-anyen nivelwarn(no
errorpara no bloquear builds durante el refactoring gradual).Refactoring realizado:
Se reemplazaron todos los
anydel código fuente con tipos explícitos:anyen parámetrosPageData,EntryWithSlug, etc.)as unknown as anyDetailPageContext<T>)anyen retornosCollectionEntry<CollectionKey>)anyen testsResultado: cero
anyen el código fuente (src/). El únicoeslint-disableparano-explicit-anyque queda está encypress/e2e/stubs.ts,que es código legacy pendiente de eliminación.
Regla en
copilot-instructions.md:Esto asegura que Copilot tampoco genere código con
any.2. Omitir semicolons — convención sin enforcement automático
Decisión: omitir
;al final de sentencias en todo el código delproyecto.
Estado actual: la convención está documentada en
copilot-instructions.mdpero no está enforceada por ESLint ni por un formateador automático. Esto
es intencional mientras se evalúan las opciones (ver sección de formateo
abajo).
Excepción conocida: el código generado por
npx playwright codegenincluye
;automáticamente. El flujo de trabajo esperado es:playwright codegen;manualmente o con un futuro autofix3. Indentación a 2 espacios — enforceada
Esta regla sí está enforceada a nivel
errory se aplica con--fix.Configuración actual de ESLint
Lo que falta estructurar
La configuración actual tiene reglas funcionales pero hay áreas pendientes
de organizar:
no-explicit-anywarn)errorcuando se elimine Cypressno-unused-varserror)_prefixedimport/no-unresolvedindent.astrofrontmatterjsx-a11y, no estiloDecisión pendiente: formateo automático
Opciones en evaluación
A. Prettier
eslint-config-prettiereslint-config-prettierpara desactivar reglas conflictivas.astrotiene soporte limitado (pluginprettier-plugin-astro)B. ESLint Stylistic (
@stylistic/eslint-plugin)semi,quotes, etc.C. Mantener convención manual (status quo)
copilot-instructions.mdplaywright codegengenera código con estilo diferenteEstado
En pausa. No se ha tomado una decisión final sobre formateo automático.
Los tradeoffs se evaluarán cuando:
Por ahora, la convención se mantiene vía
copilot-instructions.mdyrevisión manual.
Diagrama del estado actual
Acciones futuras (cuando se retome)
semi: ['error', 'never']o vía Prettier)quotes: ['error', 'single']o similar)no-explicit-anydewarnaerroreslint-disableencypress/e2e/stubs.tsal borrar Cypress@stylistic/eslint-pluginoprettiera CIReferencias
Ventajas
Positivas
anyen producción: TypeScript detecta errores en compilaciónque antes solo aparecían en runtime.
import/no-unresolvedpreviene imports rotos,especialmente con los alias de Astro (
@config/*,@utils/*).jsx-a11ydetecta problemas de accesibilidaden componentes
.astro..github/copilot-instructions.mdmantienen el código generado por IA consistente con las convenciones.
Desventajas
Deuda técnica conocida
generado por
playwright codegennecesita limpieza manual.no-explicit-anyenwarnen lugar deerror; subir cuando Cypressse elimine.
sueltas).