| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/bin/bash
- # Fichier de sortie
- OUT="RAPPORT_USAGE_CODE_MORT.md"
- echo "# 💀 Audit de Code Mort & Usage" > "$OUT"
- echo "Analyse basée sur la recherche textuelle exacte des noms de fonctions." >> "$OUT"
- echo "" >> "$OUT"
- echo "| Fichier | Ligne | Fonction | État | Occurrences | Note |" >> "$OUT"
- echo "|---|---|---|---|---|---|" >> "$OUT"
- # Compteurs
- dead_count=0
- alive_count=0
- # On boucle sur toutes les lignes contenant "function ..."
- # On exclut les commentaires
- grep -r -n "^\s*function" --include="*.jl" . | grep -v "#" | while read -r line ; do
- # 1. Extraction des métadonnées
- file=$(echo "$line" | cut -d: -f1)
- lineno=$(echo "$line" | cut -d: -f2)
-
- # Extraction propre du nom de la fonction (entre "function" et "(")
- # Ex: "function solve_poisson!(...)" -> "solve_poisson!"
- func_name=$(echo "$line" | sed -E 's/.*function\s+([a-zA-Z0-9_!]+).*/\1/')
-
- # Sécurité: ignorer si le nom est vide ou bizarre
- if [[ -z "$func_name" || "$func_name" == *"function"* ]]; then
- continue
- fi
- # 2. Comptage des occurrences (Recherche mot entier -w)
- # On cherche dans tout le dossier courant (.)
- count=$(grep -r -w --include="*.jl" "$func_name" . | wc -l)
- # 3. Classification
- status=""
- note=""
-
- if [ "$count" -eq 1 ]; then
- # Si count == 1, c'est que le mot n'apparait QUE dans sa définition -> Code Mort
- status="💀 MORT"
- ((dead_count++))
- else
- # Si count > 1, elle est appelée quelque part
- status="✅ ACTIF"
- ((alive_count++))
-
- # Petit bonus : on vérifie si c'est un test ou un exemple qui l'appelle
- if grep -q "test/" <<< "$file"; then
- note="Test"
- elif grep -q "examples/" <<< "$file"; then
- note="Exemple"
- fi
- fi
- # 4. Écriture dans le rapport (Format Markdown)
- # On met en gras les fonctions mortes pour qu'elles sautent aux yeux
- if [ "$status" == "💀 MORT" ]; then
- echo "| \`$file\` | $lineno | **$func_name** | $status | $count | $note |" >> "$OUT"
- else
- echo "| \`$file\` | $lineno | \`$func_name\` | $status | $count | $note |" >> "$OUT"
- fi
- # Feedback visuel dans le terminal (optionnel)
- # echo -ne "Scanned: $func_name ($count)\r"
- done
- # Résumé à la fin
- echo "" >> "$OUT"
- echo "## 📊 Statistiques" >> "$OUT"
- echo "- Fonctions Actives : $alive_count" >> "$OUT"
- echo "- Fonctions Mortes (candidates) : $dead_count" >> "$OUT"
- echo "- **Total analysé : $((alive_count + dead_count))**" >> "$OUT"
- echo "✅ Audit terminé. Résultats dans : $OUT"
- echo " -> Actives : $alive_count"
- echo " -> Mortes : $dead_count"
|