Ce document détaille les éléments du code qui nécessitent une refactorisation pour réduire la complexité cognitive et améliorer la maintenabilité, conformément à RULE 1 et RULE 4 du projet.
Problème : Complexité cognitive > 15 (limite SonarQube)
Lint ID : 7ef1bfef-7230-4fed-a02e-e61e3339e840
-
Créer des tests unitaires pour chaque aspect de la fonction :
- Test de validation des paramètres d'entrée
- Test de création de la structure de base
- Test de création des dossiers d'epic, features et user stories
- Test de génération des slugs
- Test de création des fichiers README et Info
-
Décomposer en fonctions plus petites :
// Au lieu de tout faire dans createRule3Structure function createRule3Structure(backlogDir, adaptedResult, epicToUse) { const params = validateRule3Params(backlogDir, epicToUse, adaptedResult); if (!params) return null; const baseCreated = createBaseDirectories(params.validBacklogDir); if (!baseCreated) return null; const slugs = generateSlugs(epicToUse, adaptedResult.feature); const paths = buildDirectoryPaths(params.validBacklogDir, slugs); createFeatureDirectories(paths); createInfoFiles(paths, adaptedResult, epicToUse); return slugs; }
Problème : Précédence des opérateurs non explicite
Lint ID : e004be1d-33bc-401b-9356-f7f74ff465ba
// Avant
return lowerCase.replace(/[^a-z0-9]+/g, '-').replace(/^(-)|(-)$/g, '');
// Après (avec parenthèses explicites)
return lowerCase.replace(/[^a-z0-9]+/g, '-').replace(/(^-)|(-$)/g, '');Problème : Complexité cognitive de 31 (plus du double de la limite)
Lint ID : 4aef1b1a-e476-4b16-8ae0-5da4f62d9058
-
Créer un ensemble complet de tests avec différents types d'entrées :
- JSON valide
- JSON avec format markdown
- JSON malformé
- Réponse non-JSON
- Cas limites et exceptions
-
Décomposer en petites fonctions avec responsabilité unique :
function parseJsonResponse(content) { // Tenter le parsing direct const directResult = tryDirectParse(content); if (directResult.success) return directResult.data; // Essayer d'extraire JSON depuis markdown const markdownResult = extractJsonFromMarkdown(content); if (markdownResult.success) return markdownResult.data; // Autres stratégies de récupération const recoveryResult = attemptJsonRecovery(content); if (recoveryResult.success) return recoveryResult.data; // Échec, mais retourner le meilleur effort possible return constructFallbackResponse(content); }
| Tâche | Priorité | Estimation |
|---|---|---|
Tests pour createRule3Structure |
Haute | 1 jour |
Refactorisation de createRule3Structure |
Haute | 2 jours |
| Correction de l'expression régulière | Moyenne | 0.5 jour |
Tests pour parseJsonResponse |
Haute | 1 jour |
Refactorisation de parseJsonResponse |
Haute | 2 jours |
- Cette refactorisation suit le principe TDD (RULE 1)
- Vise à respecter la limite de 50 lignes par fonction (RULE 4)
- Améliore la lisibilité et la maintenance du code (RULE 4)
- Permet un meilleur support multi-LLM (Windsurf, Claude, Cursor)
- Réduction de la complexité cognitive sous la limite de 15
- Aucun avertissement de linting
- Maintien ou amélioration de la couverture de code
- Documentation claire des modules