Documentación · Métricas estáticas

km score

Puntaje de salud del código

Calcula un puntaje general de salud del código para el proyecto, con una nota que va de A++ (excepcional) a F— (problemas graves). Usa solo métricas estáticas (no requiere git).

Cambio incompatible en v0.14: el modelo de puntaje por defecto pasó de MI + complejidad ciclomática (6 dimensiones) a complejidad cognitiva (5 dimensiones). Usa --model legacy para recuperar el comportamiento de v0.13.

Los archivos que no son código (Markdown, TOML, JSON, etc.) se excluyen automáticamente. Los bloques de test en línea (#[cfg(test)]) se excluyen del análisis de duplicación.

km score [path]
km score --model legacy [path]    # modelo de puntaje de v0.13

Dimensiones y pesos (por defecto: cogcom)

DimensiónPesoQué mide
Complejidad cognitiva30%Método de SonarSource, penaliza el anidamiento
Duplicación20%% de código duplicado en todo el proyecto
Complejidad por indentación15%Desviación estándar de la profundidad de indentación
Esfuerzo de Halstead20%Esfuerzo mental por LOC
Tamaño de archivo15%Rango óptimo de 50 a 300 LOC

Dimensiones y pesos (—model legacy)

DimensiónPesoQué mide
Índice de mantenibilidad30%MI de verifysoft, normalizado a 0-100
Complejidad ciclomática20%Complejidad máxima por archivo
Duplicación15%% de código duplicado en todo el proyecto
Complejidad por indentación15%Desviación estándar de la profundidad de indentación
Esfuerzo de Halstead15%Esfuerzo mental por LOC
Tamaño de archivo5%Rango óptimo de 50 a 300 LOC

Cada dimensión se agrega como un promedio ponderado por LOC sobre todos los archivos (salvo la duplicación, que es un único valor a nivel de proyecto). El puntaje del proyecto es la suma ponderada de los puntajes de todas las dimensiones.

Escala de notas

NotaRango de puntajeNotaRango de puntaje
A++97-100C+73-76
A+93-96C70-72
A90-92C-67-69
A-87-89D+63-66
B+83-86D60-62
B80-82D-57-59
B-77-79F50-56
F-40-49
F—0-39

Opciones:

FlagDescripción
--model MODELModelo de puntaje: cogcom (por defecto, v0.14+) o legacy (MI + ciclomática, v0.13)
--trend [REF]Compara el puntaje actual con una ref de git (por defecto: HEAD). Muestra el cambio: B- → B (+2.3). Útil para revisar un PR: --trend origin/main
--fail-if-worseCon --trend: termina con código 1 si el puntaje bajó más que --gate-tolerance
--gate-tolerance POINTSCaída de puntaje que --fail-if-worse permite antes de fallar (por defecto: 0.01 con --gate-scope project, 0.5 con --gate-scope changed). Compara los puntajes sin redondear
--gate-scope {project,changed}Qué compara --fail-if-worse (por defecto: project, el puntaje agregado). changed mira solo los archivos que toca el diff: falla si un archivo modificado o renombrado termina por debajo del puntaje que el proyecto tenía en la ref después de bajar más que --gate-tolerance, o si crecen las líneas duplicadas del proyecto. Los archivos por encima del puntaje del proyecto, los archivos nuevos y los eliminados nunca la hacen fallar, así que quitar código sano no puede empeorar el veredicto. El informe lista cada archivo modificado con su puntaje de antes y de después
--fail-below GRADECon --trend: termina con código 1 si la nota está por debajo de GRADE (p. ej. B-). Se puede sobrescribir en .kimun.toml
--format {table,json,short,terse}Formato de salida (por defecto: table)
--include-testsIncluye los archivos de test en el análisis (excluidos por defecto)
--bottom NCantidad de peores archivos que se muestran en “needs attention” (por defecto: 10)
--min-lines NMínimo de líneas para un bloque duplicado (por defecto: 6)

Ejemplo de salida:

Code Health Score
──────────────────────────────────────────────────────────────────
 Project Score:  B+ (84.3)
 Files Analyzed: 42
 Total LOC:      8,432
──────────────────────────────────────────────────────────────────
 Dimension                 Weight   Score   Grade
──────────────────────────────────────────────────────────────────
 Cognitive Complexity         30%    85.6   B+
 Duplication                  20%    91.3   A
 Indentation Complexity       15%    79.8   B-
 Halstead Effort              20%    85.1   B+
 File Size                    15%    89.2   A-
──────────────────────────────────────────────────────────────────

 Files Needing Attention (worst scores)
──────────────────────────────────────────────────────────────────
 Score  Grade  File                       Issues
──────────────────────────────────────────────────────────────────
  54.2  F      src/legacy/parser.rs       Cognitive: 42, Indent: 3.2
  63.7  D+     src/utils/helpers.rs       Effort: 15200, Indent: 2.4
  68.9  C-     src/core/engine.rs         Size: 1243 LOC
──────────────────────────────────────────────────────────────────

km score diff — Comparar el puntaje con una ref de git

Extrae el árbol de archivos en la ref indicada, calcula el puntaje de ambas instantáneas y muestra una tabla de diferencias por dimensión. Útil para revisar cómo afectan los commits a la calidad del código.

km score diff                          # compara con HEAD (cambios sin commit)
km score diff --git-ref HEAD~1         # compara con el commit anterior
km score diff --git-ref main           # compara con la rama main
km score diff --format json            # salida legible por máquinas

Opciones:

FlagDescripción
--git-ref REFRef de git con la que se compara (por defecto: HEAD)
--model MODELModelo de puntaje: cogcom (por defecto) o legacy
--format {table,json,short,terse}Formato de salida (por defecto: table)
--bottom NCantidad de peores archivos que se muestran (por defecto: 10)
--min-lines NMínimo de líneas para un bloque duplicado (por defecto: 6)