Aller au contenu

Métriques du code

Un instantané mesuré du code de Domain et de ses modules, compté avec cloc. Les graphiques montrent les lignes de code (lignes vides et de commentaire exclues) sauf indication contraire.

Instantané

Mesuré sur la branche 3.x, 2026-10-21, avec cloc 2.08. 492 fichiers, 35,477 lignes de code, 15,293 lignes de commentaire, 7,468 vides (58,238 lignes au total). Voir la section Méthodologie ci-dessous pour reproduire.

Vue d'ensemble

Code Commentaires Vides Fichiers Production Tests
35,477 15,293 7,468 492 22,481 12,996

Production et tests

Domain embarque 12,996 lignes de code de test pour 22,481 lignes de code de production, soit un ratio tests/production de 58%.

Lignes par langage

Langage Code Commentaires Vides Fichiers
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

Composition

Tous langages confondus, le code représente 61% des lignes, les commentaires 26% et les lignes vides 13%. La part de commentaires reflète les conventions de docblock de Drupal.

Par module

Code de production (laiton) et de test (acier) par module, du plus grand au plus petit.

Module Production Tests Total
domain 5,106 4,220 9,326
(racine du projet) 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

Suite de tests

Domain embarque 124 classes de test automatisées (311 méthodes de test), ventilées par type ci-dessous.

Type de test Classes Méthodes
Functional 83 107
Kernel 34 196
FunctionalJavascript 6 6
Unit 1 2
Total 124 311

Surface d'architecture

Ce que contient le module, compté sur l'ensemble de Domain et de ses modules : les briques Drupal (services, plugins, hooks, routes, entités) qui composent son API publique et interne.

Élément Nombre
Services 61
Abonnés aux événements 0
Implémentations de hook 56
Routes 19
Permissions 24
Formulaires 9
Contrôleurs 5
Types d'entité de contenu 0
Types d'entité de configuration 2
Types de schéma de configuration 40
Plugins 49

Les plugins se répartissent par type comme suit, du plus grand au plus petit :

Méthodologie

Les comptes sont produits avec cloc, lancé depuis la racine du projet sur les fichiers que rapporte git ls-files : une copie de travail qui a installé vendor/, prévisualisé la documentation dans site/ ou récupéré un node_modules/ compte donc comme l'archive que publie une version. L'échafaudage de prévisualisation Tugboat dans .tugboat/ est exclu, tout comme cette page et ses traductions, car une page qui se compte elle-même modifie l'arborescence qu'elle vient de mesurer. L'instantané ci-dessus indique la version de cloc, car cloc compte différemment d'une version à l'autre.

git ls-files | grep -v -e '^docs/metrics' -e '^\.tugboat/' > files.txt
cloc --list-file=files.txt

Chaque fichier est rattaché au module englobant le plus proche (un répertoire contenant un *.info.yml) ; les modules de support de test situés sous un chemin tests/ comptent comme code de test de leur parent. Un fichier est du code de test lorsque son chemin contient un segment tests/, du code de production sinon. Les fichiers situés hors de tout module, comme le README, cette documentation et la configuration de l'intégration continue et des outils, sont regroupés sous la racine du projet.

Les classes de test sont comptées selon leur répertoire sous tests/src (Unit, Kernel, Functional, FunctionalJavascript) ; la colonne des méthodes compte chaque méthode préfixée test, et chaque autre méthode annotée @test ou #[Test]. La surface d'architecture compte les définitions de service dans *.services.yml (alias exclus), les clés de route et de permission dans *.routing.yml et *.permissions.yml, les attributs #[Hook], les classes de plugin sous src/Plugin/, les formulaires et contrôleurs sous src/Form et src/Controller, les attributs de type d'entité dans src/Entity, et les types de premier niveau dans config/schema/*.yml, le tout agrégé sur le module et ses sous-modules.

Les graphiques sont des SVG statiques en ligne générés à partir des données mesurées, ils ne nécessitent donc ni JavaScript ni greffon de graphiques. Ils sont décoratifs et marqués aria-hidden : chaque chiffre qu'ils dessinent figure aussi dans le tableau ou la phrase qui les accompagne, si bien qu'un lecteur d'écran obtient les nombres plutôt qu'une image sans nom. Un rôle img sans nom accessible est pire que l'absence de rôle, car il masque aussi les libellés du graphique.