Code/docs/RAPPORT_RUFF.md
Stéphan Peccini f812fac89e
feat: Amelioration structure - tests, documentation et qualite du code
Cette mise a jour complete ameliore significativement la qualite et la maintenabilite du projet.

1. Extension de la couverture de tests

Couverture globale passee de 8% a 16% (+100%)
- Ajout de 25 nouveaux tests (total: 67 tests, 100% passent)
- Nouveaux fichiers de tests:
  * tests/unit/test_gitea.py (17 tests)
  * tests/unit/test_fiches_tickets.py (8 tests)

Etat de la couverture par module:
- utils/gitea.py: 100%
- utils/widgets.py: 100%
- utils/logger.py: 94%
- app/fiches/utils/tickets/core.py: 77%
- utils/graph_utils.py: 59%

2. Documentation d'architecture complete

Creation de 3 nouveaux documents (30 Ko total):
- docs/ARCHITECTURE.md (15 Ko)
  * Architecture complete du projet
  * Flux de donnees detailles
  * Indices de vulnerabilite (IHH, ISG, ICS, IVC)
  * Structure du graphe NetworkX

- docs/MODULES.md (15 Ko)
  * Guide des 11 modules principaux
  * Exemples de code (15+ snippets)
  * Bonnes pratiques
  * Guide de depannage

- docs/README.md (4 Ko)
  * Index de toute la documentation

Contenu documente:
- 5 modules applicatifs
- 6 modules utilitaires
- 4 indices de vulnerabilite avec formules et seuils
- Conventions de code

3. Reorganisation de la documentation

Structure finale optimisee:
- Racine: README.md (mis a jour) + Instructions.md
- docs/: 11 documents organises par categorie

Fichiers deplaces vers docs/:
- README_connexion.md -> docs/CONNEXION.md
- GUIDE_LOGS.md -> docs/
- GUIDE_RUFF.md -> docs/
- RAPPORT_RUFF.md -> docs/
- RAPPORT_CORRECTIONS_AUTO.md -> docs/
- REFACTORING_REPORT.md -> docs/
- VERIFICATION_LOGS.md -> docs/
- TODO_IA_BATCH.md -> docs/

4. Ajout de docstrings

52 fonctions documentees en style Google (100%)
Documentation en francais avec Args, Returns, Raises

5. Corrections automatiques Ruff

Application de 347 corrections automatiques:
- Formatage du code (line-length: 120)
- Organisation des imports
- Simplifications syntaxiques
- Suppressions de code mort
- Ameliorations de performance

6. Configuration qualite du code

Nouveaux fichiers:
- pyproject.toml: configuration Ruff complete
- .vscode/settings.json: integration Ruff avec formatOnSave
- GUIDE_RUFF.md: documentation du linter
- GUIDE_LOGS.md: documentation du logging
- .gitignore: ajout htmlcov/ pour rapports de couverture

Etat final du projet:
- Linter: Ruff configure (15 regles actives)
- Tests: 67 tests (100% passent)
- Couverture de code: 16%
- Docstrings: 52/52 (100%)
- Documentation: 11 fichiers organises

Impact:
- Tests plus robustes et maintenables
- Documentation technique complete
- Meilleure organisation des fichiers
- Workflow optimise avec Ruff
- Code pret pour integration continue

References:
- Architecture: docs/ARCHITECTURE.md
- Guide modules: docs/MODULES.md
- Tests: tests/unit/
- Configuration: pyproject.toml

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-07 19:00:49 +01:00

206 lines
6.1 KiB
Markdown

# Rapport d'analyse Ruff - Projet FabNum
**Date** : 2026-02-07
**Branche** : `refactor/ameliorations-structure`
## Statistiques globales
| Categorie | Nombre | Auto-fixable |
|-----------|--------|--------------|
| **Total problemes detectes** | 615 | 322 (52%) |
| **Docstrings manquantes** | 52 | Non |
| **Arguments non documentes** | 2 | Non |
| **Annotations depreciees** | 118 | Oui |
| **Imports mal tries** | 48 | Oui |
| **Style docstrings** | 68 | Oui |
| **Nommage variables** | 83 | Non |
## Top 10 des problemes detectes
1. **UP006** (118) : Annotations de type depreciees (Tuple → tuple, List → list)
2. **N803** (83) : Noms d'arguments non conformes (G → graph)
3. **D212** (68) : Style docstrings (resume sur premiere ligne)
4. **D103** (52) : **Docstrings manquantes dans fonctions publiques**
5. **I001** (48) : Imports mal tries ou non formattes
6. **UP007** (29) : Union types deprecies (Optional[X] → X | None)
7. **PTH123** (24) : Utiliser pathlib au lieu de open()
8. **RET504** (17) : Assignation inutile avant return
9. **RET505** (14) : else inutile apres return
10. **UP015** (14) : Mode 'r' redondant dans open()
## Docstrings manquantes (54 fonctions)
### Fichiers prioritaires (logique metier critique)
#### utils/gitea.py (5 fonctions)
- `lire_reponse()` - Ligne 11
- `ecrire_reponse()` - Ligne 16
- `verifier_cache_valide()` - Ligne 45
- `lire_contenu_repo()` - Ligne 58
- `get_json()` - Ligne 80
#### utils/graph_utils.py (5 fonctions)
- `recuperer_donnees()` - Ligne 20
- `recuperer_donnees_2()` - Ligne 35
- `calculer_ihh()` - Ligne 59
- `obtenir_operations_et_pays()` - Ligne 106
- `calculer_nombre_pays()` - Ligne 251
#### app/plan_d_action/utils/data/plan_d_action.py (12 fonctions)
- `construire_plan_d_action()` - Ligne 17
- `obtenir_dernier_niveau_operation()` - Ligne 38
- `recuperer_minerais_operation()` - Ligne 78
- `determiner_action_operation()` - Ligne 142
- `obtenir_operations_concernees()` - Ligne 200
- `calculer_criticite_minerai()` - Ligne 241
- `recuperer_pays_minerai()` - Ligne 271
- `calculer_isg_moyen()` - Ligne 281
- `calculer_ics_moyen()` - Ligne 291
- `obtenir_risques_critiques()` - Ligne 307
- `calculer_score_risque()` - Ligne 329
- `generer_recommandations()` - Ligne 355
#### app/fiches/utils/tickets/core.py (7 fonctions)
- `creer_ticket()` - Ligne 12
- `modifier_ticket()` - Ligne 24
- `supprimer_ticket()` - Ligne 49
- `lister_tickets()` - Ligne 81
- `get_ticket()` - Ligne 94
- `ticket_exists()` - Ligne 98
- `get_all_tickets()` - Ligne 102
#### app/fiches/utils/tickets/display.py (4 fonctions)
- `afficher_ticket()` - Ligne 14
- `afficher_liste_tickets()` - Ligne 26
- `formater_date()` - Ligne 55
- `afficher_badge_statut()` - Ligne 70
### Fichiers secondaires
#### utils/persistance.py (6 fonctions)
- `charger_config()` - Ligne 11
- `sauver_config()` - Ligne 15
- `get_cache_path()` - Ligne 146
- `read_cache()` - Ligne 149
- `write_cache()` - Ligne 152
- `clear_cache()` - Ligne 155
#### utils/visualisation.py (4 fonctions)
- `afficher_graphique_altair()` - Ligne 9
- `creer_graphes()` - Ligne 82
- `lancer_visualisation_ihh_ics()` - Ligne 156
- `lancer_visualisation_ihh_ivc()` - Ligne 174
#### Autres (11 fonctions)
- app/analyse/interface.py : 1 fonction (ligne 81)
- app/fiches/interface.py : 1 fonction (ligne 20)
- app/fiches/utils/tickets/creation.py : 1 fonction (ligne 174)
- app/personnalisation/interface.py : 1 fonction (ligne 12)
- app/personnalisation/utils/ajout.py : 1 fonction (ligne 7)
- app/personnalisation/utils/import_export.py : 1 fonction (ligne 6)
- app/plan_d_action/utils/data/pda_interface.py : 3 fonctions (lignes 3, 130, 172)
## Arguments non documentes (2 fonctions)
1. **app/analyse/sankey.py:557** - `afficher_sankey()`
- Manque : filtrer_ics, filtrer_ivc, niveau_arrivee, niveau_depart, noeuds_arrivee, noeuds_depart
2. **app/fiches/utils/dynamic/indice/ics.py:67** - `build_dynamic_sections()`
- Manque : md_raw
## Corrections automatiques disponibles
Ruff peut corriger automatiquement **322 problemes** (52%) :
### Corrections rapides (5 min)
```bash
# Trier les imports
ruff check app/ utils/ --select I001 --fix
# Corriger le style des docstrings
ruff check app/ utils/ --select D212,D202 --fix
# Moderniser les annotations de type
ruff check app/ utils/ --select UP006,UP007 --fix
```
### Corrections a valider (15 min)
```bash
# Simplifier les returns
ruff check app/ utils/ --select RET504,RET505,RET507 --fix
# Supprimer code inutile
ruff check app/ utils/ --select UP015,PIE790 --fix
```
## Plan d'action recommande
### Phase 1 : Corrections automatiques (20 min)
1. Executer les corrections auto-fixables
2. Verifier que les tests passent
3. Commit
### Phase 2 : Docstrings critiques (3-4h)
Priorite par importance metier :
1. **utils/gitea.py** (30 min)
- Critique : synchronisation avec backend Gitea
2. **utils/graph_utils.py** (45 min)
- Critique : calculs des indices IHH, IVC, etc.
3. **app/plan_d_action/utils/data/plan_d_action.py** (1h30)
- Critique : logique metier du plan d'action
4. **app/fiches/utils/tickets/*** (1h)
- Important : systeme de tickets
5. **Autres fichiers** (30 min)
- Moins critique mais necessaire
### Phase 3 : Corrections manuelles (1-2h)
1. Renommer G → graph (83 occurrences)
2. Remplacer open() par pathlib (24 occurrences)
3. Nettoyer les else inutiles (14 occurrences)
### Phase 4 : Validation finale (30 min)
1. Executer tous les tests
2. Verifier avec Ruff qu'il ne reste que des warnings acceptables
3. Commit final
## Temps total estime : 6-8h
## Commandes utiles
### Voir tous les problemes
```bash
ruff check app/ utils/
```
### Voir uniquement les docstrings
```bash
ruff check app/ utils/ --select D
```
### Corriger automatiquement
```bash
ruff check app/ utils/ --fix
```
### Verifier un fichier specifique
```bash
ruff check app/plan_d_action/utils/data/plan_d_action.py
```
### Statistiques
```bash
ruff check app/ utils/ --statistics
```
## Notes
- Les modules IA/, batch_ia/, pgpt/ sont exclus de l'analyse (priorite basse)
- La convention de docstrings est Google Style
- Longueur de ligne maximale : 120 caracteres
- Tests pytest integres dans la configuration