#!/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"