audit_usage.sh 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/bin/bash
  2. # Fichier de sortie
  3. OUT="RAPPORT_USAGE_CODE_MORT.md"
  4. echo "# 💀 Audit de Code Mort & Usage" > "$OUT"
  5. echo "Analyse basée sur la recherche textuelle exacte des noms de fonctions." >> "$OUT"
  6. echo "" >> "$OUT"
  7. echo "| Fichier | Ligne | Fonction | État | Occurrences | Note |" >> "$OUT"
  8. echo "|---|---|---|---|---|---|" >> "$OUT"
  9. # Compteurs
  10. dead_count=0
  11. alive_count=0
  12. # On boucle sur toutes les lignes contenant "function ..."
  13. # On exclut les commentaires
  14. grep -r -n "^\s*function" --include="*.jl" . | grep -v "#" | while read -r line ; do
  15. # 1. Extraction des métadonnées
  16. file=$(echo "$line" | cut -d: -f1)
  17. lineno=$(echo "$line" | cut -d: -f2)
  18. # Extraction propre du nom de la fonction (entre "function" et "(")
  19. # Ex: "function solve_poisson!(...)" -> "solve_poisson!"
  20. func_name=$(echo "$line" | sed -E 's/.*function\s+([a-zA-Z0-9_!]+).*/\1/')
  21. # Sécurité: ignorer si le nom est vide ou bizarre
  22. if [[ -z "$func_name" || "$func_name" == *"function"* ]]; then
  23. continue
  24. fi
  25. # 2. Comptage des occurrences (Recherche mot entier -w)
  26. # On cherche dans tout le dossier courant (.)
  27. count=$(grep -r -w --include="*.jl" "$func_name" . | wc -l)
  28. # 3. Classification
  29. status=""
  30. note=""
  31. if [ "$count" -eq 1 ]; then
  32. # Si count == 1, c'est que le mot n'apparait QUE dans sa définition -> Code Mort
  33. status="💀 MORT"
  34. ((dead_count++))
  35. else
  36. # Si count > 1, elle est appelée quelque part
  37. status="✅ ACTIF"
  38. ((alive_count++))
  39. # Petit bonus : on vérifie si c'est un test ou un exemple qui l'appelle
  40. if grep -q "test/" <<< "$file"; then
  41. note="Test"
  42. elif grep -q "examples/" <<< "$file"; then
  43. note="Exemple"
  44. fi
  45. fi
  46. # 4. Écriture dans le rapport (Format Markdown)
  47. # On met en gras les fonctions mortes pour qu'elles sautent aux yeux
  48. if [ "$status" == "💀 MORT" ]; then
  49. echo "| \`$file\` | $lineno | **$func_name** | $status | $count | $note |" >> "$OUT"
  50. else
  51. echo "| \`$file\` | $lineno | \`$func_name\` | $status | $count | $note |" >> "$OUT"
  52. fi
  53. # Feedback visuel dans le terminal (optionnel)
  54. # echo -ne "Scanned: $func_name ($count)\r"
  55. done
  56. # Résumé à la fin
  57. echo "" >> "$OUT"
  58. echo "## 📊 Statistiques" >> "$OUT"
  59. echo "- Fonctions Actives : $alive_count" >> "$OUT"
  60. echo "- Fonctions Mortes (candidates) : $dead_count" >> "$OUT"
  61. echo "- **Total analysé : $((alive_count + dead_count))**" >> "$OUT"
  62. echo "✅ Audit terminé. Résultats dans : $OUT"
  63. echo " -> Actives : $alive_count"
  64. echo " -> Mortes : $dead_count"