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.