🛡️ Code Quality · Metrics

@complexity-analyzerLe radar gnarly — mesure objective + plan de décomposition

Maifady est un plugin Claude Code 100% gratuit avec 30 agents IA — @complexity-analyzer mesure la complexité cyclomatique et cognitive de tes fonctions, classe les pires offenders et propose un plan de décomposition concret pour les top 3. Parce que "ce code me paraît gnarly" n'est pas une métrique.

Télécharger MaifadyVoir les 30 agents

Le problème qu'il résout

Tu sens que ton code devient "complexe" mais tu ne sais pas où précisément. Tu pourrais lancer SonarQube, mais c'est lourd à setup. Tu pourrais utiliser lizard ou radon, mais ils crachent juste des chiffres bruts sans contexte ni recommandation.

@complexity-analyzer mesure ET propose : pour les 3 fonctions les plus complexes, il te donne pourquoi elles sont dures à lire et comment les décomposer concrètement.

Comment il bosse

  1. Utilise un outil natif si dispo (lizard, radon, eslint-plugin-sonarjs, phpmetrics).
  2. Sinon, parse le code et compte manuellement :
    • CC : +1 par if, else if, case, for, while, catch, &&, ||, ?:.
    • Cognitive : pareil mais avec multiplicateur de profondeur (niveau 2 = +2, niveau 3 = +3).
  3. Classe les fonctions par complexité cognitive (corrélée à la densité de bugs).
  4. Pour les 3 pires, propose un plan de décomposition concret avec extraction de sous-fonctions et sous-composants.

Exemple concret

Tu tapes

@complexity-analyzer top 10 hot spots du repo, par complexité cognitive.
Pour les 3 pires, plan de décomposition.

Tu obtiens

# Complexity report — top 10

| Function          | File:line          | CC | Cog | LOC |
|-------------------|--------------------|----|-----|-----|
| renderDashboard   | Dashboard.tsx:42   | 28 | 52  | 187 |
| processWebhook    | Webhook.php:118    | 24 | 47  | 161 |
| applyDiscount     | Pricing.ts:88      | 22 | 41  | 144 |
...

## Top 3 — plan de décomposition

### 1. renderDashboard (cog 52)
- Pourquoi dur à lire : 4 niveaux d'imbrication + mix data
  fetching + rendering.
- Plan :
  1. Extraire useDashboardData() (hook) — fetching.
  2. Extraire 3 sous-composants : StatsRow, RecentActivity, Alerts.
  3. renderDashboard devient orchestrateur ~30 lignes.

Pourquoi tu vas l'aimer

📊

Métrique objective

Plus de "je trouve ça compliqué". Tu as un chiffre, comparable d'un fichier à l'autre, d'une PR à l'autre.

🧠

Cognitive en priorité

Cognitive correlate mieux avec les bugs que cyclomatic. L'agent classe par cognitive — le bon signal.

🪜

Plan concret, pas un score

Pas "ce code est trop complexe, refactor-le". Mais "extrait ces 3 sous-fonctions, voici lesquelles".

⏱️

Trends in CI

Compare PR par PR. Si la cognitive moyenne grimpe, c'est un signal de dégradation à intercepter tôt.

Quand l'utiliser

✅ Idéal pour

  • Identifier les zones du repo à refactor en priorité
  • Avant d'ajouter une feature à une fonction déjà complexe
  • Cleanup régulier (mensuel) sur les top 10
  • Métrique de santé en CI

⚠️ Pas adapté quand

  • Tu cherches le code mort → @dead-code-finder
  • Tu as identifié la fonction à refactor, tu veux le plan d'exécution → @refactor-assistant
  • Une fonction est intrinsèquement complexe (state machine, parser) — accepte-le, ne sur-décompose pas

Combine avec ces agents

Questions fréquentes

Quelle différence entre cyclomatic et cognitive ?

Cyclomatic compte chaque point de décision (+1). Cognitive pénalise davantage l'imbrication : une condition à 4 niveaux de profondeur coûte plus que 4 conditions à plat. La cognitive correlate mieux avec la densité de bugs réels.

Utilise-t-il des outils existants ?

Oui s'ils sont disponibles : lizard, radon, eslint-plugin-sonarjs, phpmetrics. Sinon, il calcule manuellement par parsing du code.

Quels seuils ?

CC : warn 10, fix 15. Cognitive : warn 15, fix 25. LOC : warn 40, fix 80. Params : warn 5, fix 7. Nesting : warn 4, fix 6.

Prêt à mesurer ton code ?

Télécharger Maifady