Skip to content

Latest commit

 

History

History
112 lines (82 loc) · 3.91 KB

File metadata and controls

112 lines (82 loc) · 3.91 KB

Plan de refactorisation - Agile Planner MCP Server

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èmes de complexité cognitive identifiés

1. Fonction createRule3Structure - mcp-router.js

Problème : Complexité cognitive > 15 (limite SonarQube)
Lint ID : 7ef1bfef-7230-4fed-a02e-e61e3339e840

Plan de refactorisation (TDD)

  1. 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
  2. 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;
    }

2. Expression régulière dans _getSlugifyFunction - mcp-router.js

Problème : Précédence des opérateurs non explicite
Lint ID : e004be1d-33bc-401b-9356-f7f74ff465ba

Solution recommandée

// 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, '');

3. Fonction parseJsonResponse - json-parser.js

Problème : Complexité cognitive de 31 (plus du double de la limite)
Lint ID : 4aef1b1a-e476-4b16-8ae0-5da4f62d9058

Plan de refactorisation (TDD)

  1. 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
  2. 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);
    }

Échéancier proposé

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

Alignement sur les règles du projet

  • 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)

Mesures de succès

  • 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