Métricas del código¶
Una instantánea medida del código de Domain y sus módulos, contada con cloc. Los gráficos muestran líneas de código (líneas en blanco y de comentario excluidas) salvo que se indique lo contrario.
Instantánea
Medido en la rama 3.x, 2026-10-21, con cloc 2.08. 492 archivos, 35,477 líneas de código, 15,293 líneas de comentario, 7,468 en blanco (58,238 líneas en total). Consulte la sección Metodología más abajo para reproducir.
Resumen¶
| Código | Comentarios | En blanco | Archivos | Producción | Pruebas |
|---|---|---|---|---|---|
| 35,477 | 15,293 | 7,468 | 492 | 22,481 | 12,996 |
Producción y pruebas¶
Domain incluye 12,996 líneas de código de prueba que respaldan 22,481 líneas de código de producción, una proporción pruebas/producción del 58%.
Líneas por lenguaje¶
| Lenguaje | Código | Comentarios | En blanco | Archivos |
|---|---|---|---|---|
| PHP | 23,347 | 15,087 | 5,179 | 322 |
| Markdown | 6,555 | 0 | 2,129 | 42 |
| YAML | 5,133 | 58 | 77 | 119 |
| CSS | 236 | 69 | 69 | 1 |
| JavaScript | 122 | 65 | 14 | 4 |
| Text | 41 | 0 | 0 | 2 |
| JSON | 25 | 0 | 0 | 1 |
| Twig | 18 | 14 | 0 | 1 |
Composición¶
En todos los lenguajes, el código supone el 61% de las líneas, los comentarios el 26% y las líneas en blanco el 13%. La proporción de comentarios refleja las convenciones de docblock de Drupal.
Por módulo¶
Código de producción (latón) y de prueba (acero) por módulo, de mayor a menor.
| Módulo | Producción | Pruebas | Total |
|---|---|---|---|
| domain | 5,106 | 4,220 | 9,326 |
| (raíz del proyecto) | 6,763 | 1 | 6,764 |
| domain_access | 2,064 | 1,819 | 3,883 |
| domain_alias | 1,729 | 1,769 | 3,498 |
| domain_source | 1,427 | 1,910 | 3,337 |
| domain_content | 3,003 | 263 | 3,266 |
| domain_config_ui | 1,270 | 932 | 2,202 |
| domain_config | 519 | 866 | 1,385 |
| domain_config_language | 429 | 496 | 925 |
| domain_config_language_ui | 171 | 720 | 891 |
Conjunto de pruebas¶
Domain incluye 124 clases de prueba automatizadas (311 métodos de prueba), desglosadas por tipo a continuación.
| Tipo de prueba | Clases | Métodos |
|---|---|---|
| Functional | 83 | 107 |
| Kernel | 34 | 196 |
| FunctionalJavascript | 6 | 6 |
| Unit | 1 | 2 |
| Total | 124 | 311 |
Superficie de arquitectura¶
Lo que contiene el módulo, contado en todo Domain y sus módulos: los bloques de Drupal (servicios, plugins, hooks, rutas, entidades) que componen su API pública e interna.
| Elemento | Cantidad |
|---|---|
| Servicios | 61 |
| Suscriptores de eventos | 0 |
| Implementaciones de hook | 56 |
| Rutas | 19 |
| Permisos | 24 |
| Formularios | 9 |
| Controladores | 5 |
| Tipos de entidad de contenido | 0 |
| Tipos de entidad de configuración | 2 |
| Tipos de esquema de configuración | 40 |
| Plugins | 49 |
Los plugins se desglosan por tipo así, de mayor a menor:
Metodología¶
Los recuentos se producen con cloc, ejecutado desde la raíz del proyecto sobre los archivos que informa git ls-files, de modo que una copia de trabajo que haya instalado vendor/, previsualizado la documentación en site/ o descargado un node_modules/ cuenta igual que el archivo que publica una versión. El andamiaje de previsualización de Tugboat en .tugboat/ queda excluido, al igual que esta página y sus traducciones, porque una página que se cuenta a sí misma cambia el árbol que acaba de medir. La instantánea de arriba indica la versión de cloc, porque cloc cuenta de forma distinta de una versión a otra.
git ls-files | grep -v -e '^docs/metrics' -e '^\.tugboat/' > files.txt
cloc --list-file=files.txt
Cada archivo se atribuye al módulo contenedor más cercano (un directorio con un *.info.yml); los módulos de soporte de pruebas bajo una ruta tests/ cuentan como código de prueba de su módulo padre. Un archivo es código de prueba cuando su ruta contiene un segmento tests/, y de producción en caso contrario. Los archivos fuera de todo módulo, como el README, esta documentación y la configuración de la integración continua y de las herramientas, se agrupan bajo la raíz del proyecto.
Las clases de prueba se cuentan por su directorio bajo tests/src (Unit, Kernel, Functional, FunctionalJavascript); la columna de métodos cuenta cada método con prefijo test, y cada otro anotado @test o #[Test]. La superficie de arquitectura cuenta las definiciones de servicio en *.services.yml (sin contar los alias), las claves de ruta y permiso en *.routing.yml y *.permissions.yml, los atributos #[Hook], las clases de plugin bajo src/Plugin/, los formularios y controladores bajo src/Form y src/Controller, los atributos de tipo de entidad en src/Entity, y los tipos de nivel superior en config/schema/*.yml, todo agregado en el módulo y sus submódulos.
Los gráficos son SVG estáticos en línea generados a partir de los datos medidos, por lo que no necesitan JavaScript ni ningún complemento de gráficos. Son decorativos y están marcados con aria-hidden: cada cifra que dibujan aparece también en la tabla o la frase que los acompaña, de modo que un lector de pantalla obtiene los números en lugar de una imagen sin nombre. Un rol img sin nombre accesible es peor que no tener rol, porque también oculta las etiquetas del gráfico.