CodeClone 2.0.0b1: Análisis de salud del código Python consciente de la base
CodeClone 2.0.0b1 evoluciona de un detector simple de clones a un monitor estructural de salud para proyectos en Python dentro de los flujos CI. El enfoque ahora se centra en la comparación con una base establecida, diferenciando entre deuda técnica histórica y nuevas regresiones. Ofrece puntuación de salud, detección de código muerto y hallazgos estructurales con contratos deterministas para integración sin problemas en las pipelines.
La base como fundamento de los contratos CI
En la versión 2.0, la base se ha consolidado como una instantánea validada del estado del proyecto. Separa los problemas conocidos de los cambios recientes, participa en el control de métricas y se comporta de forma predecible en entornos CI.
Principios clave:
- Validación de esquema con semántica de confianza.
- Separación clara entre problemas conocidos y nuevos en clones, complejidad y otras métricas.
- Fijar el estado actual como base para evitar nuevas regresiones en la rama principal.
Esto permite puertas de calidad sin bloquear todo el proyecto por deuda legada.
Puntuación de salud: una métrica modular de calidad
La nueva puntuación de salud agrega múltiples señales:
| Métrica | Descripción |
|--------------|--------------------------------------|
| Clones | Duplicación estructural |
| Complejidad | Complejidad ciclomática de funciones |
| Acoplamiento | Interdependencia entre módulos |
| Cohesión | Consistencia interna del módulo |
| Código muerto | Código no utilizado |
| Dependencias | Ciclos de dependencias |
| Cobertura | Cobertura de pruebas |
La puntuación se desglosa en detalles: contribución del código de producción frente a las pruebas, y zonas de alto riesgo. El informe HTML incluye medidores, tarjetas KPI y gráficos radar para insights rápidos.
Detección de código muerto sin heurísticas
El detector de código muerto considera patrones específicos de Python: ganchos de frameworks, reflexión, carga de plugins. En lugar de depender de exclusiones implícitas, utiliza supresiones en línea:
# codeclone: ignore[dead-code]
def handle_exception(exc: Exception) -> None:
...
o
class Middleware: # codeclone: ignore[dead-code]
...
La supresión desactiva la regla localmente sin afectar otros análisis. Los elementos aparecen en los informes pero no influyen en la puntuación de salud.
Hallazgos estructurales más allá de los clones
Una nueva capa detecta señales arquitectónicas tempranas:
duplicated_branches— ramas repetidas en flujo de control.clone_guard_exit_divergence— divergencia en puntos de salida de bloques duplicados.clone_cohort_drift— desviación entre familias de construcciones similares.
El núcleo genera hechos en JSON canónico; la interfaz los visualiza sin renderizado adicional.
Informes desde una única fuente
Todos los resultados son proyecciones del JSON canónico:
- HTML con Visión general, Resumen ejecutivo y Desglose por fuente.
- JSON para scripts automatizados.
- Texto/Markdown para logs.
- Formato SARIF con baselineState, %SRCROOT% y artefactos para IDE o escaneo de código.
La determinación se asegura mediante ordenación estable y canonización de carga útil.
Umbral reducido y rendimiento
Los umbrales se han relajado para mayor cobertura:
--min-locpara funciones: reducido de 15 a 10.- Puertas más suaves para bloques/segmentos.
Compensación: aumento del volumen de análisis. Mitigado con optimizaciones en caché y contratos de informes.
Contratos bajo el capó
Especificaciones rigurosas:
- Contrato de base: esquema + semántica.
- Contrato de caché: previsibilidad.
- Contrato de informe: formato consistente.
- Códigos de salida CLI: significado semántico claro.
Esto minimiza fallos en pipelines por cambios ocultos.
Lo que importa
- La base aísla la deuda de las regresiones para una verificación real en CI.
- La puntuación de salud es granular, con énfasis en el código de producción.
- Las supresiones en línea mantienen transparencia en el análisis de código muerto.
- Los hallazgos estructurales detectan problemas antes de que se formen clones.
- Compatible con SARIF para integración con GitHub Actions, Azure DevOps.
— Editorial Team
Aún no hay comentarios.