# Rapport des corrections automatiques Ruff **Date** : 2026-02-07 **Branche** : `refactor/ameliorations-structure` ## Résumé des corrections appliquées ### Statistiques globales - **Problèmes initiaux** : 615 - **Problèmes résolus** : 347 (56%) - **Problèmes restants** : 268 (44%) - **Fichiers modifiés** : 46 ### Corrections appliquées automatiquement #### 1. Tri des imports (48 corrections) - **Règle** : I001 - **Impact** : Organisation cohérente des imports selon PEP8 - **Sections** : stdlib, third-party, first-party, local #### 2. Style des docstrings (73 corrections) - **Règles** : D212, D202 - **Impact** : Uniformisation du format Google Style - **Changement** : Résumé sur première ligne, pas de ligne vide après docstring #### 3. Annotations de type modernes (147 corrections) - **Règles** : UP006, UP007 - **Impact** : Syntaxe Python 3.10+ - **Changements** : - `Tuple[X, Y]` → `tuple[X, Y]` - `List[X]` → `list[X]` - `Dict[K, V]` → `dict[K, V]` - `Set[X]` → `set[X]` - `Optional[X]` → `X | None` - `Union[X, Y]` → `X | Y` #### 4. Simplifications diverses (91 corrections) - **Règles** : UP015, W293, UP009, B905, SIM114, F401, E401, D416 - **Changements** : - Suppression des modes 'r' redondants dans open() - Suppression espaces dans lignes vides - Suppression déclaration encoding UTF-8 inutile - Ajout strict=False dans zip() - Suppression imports inutilisés - Correction format docstrings ## État actuel (268 problèmes restants) ### Problèmes nécessitant action manuelle #### 1. Docstrings manquantes (52) **Règle** : D103 **Priorité** : HAUTE **Fichiers critiques** : - utils/gitea.py (5 fonctions) - utils/graph_utils.py (5 fonctions) - app/plan_d_action/utils/data/plan_d_action.py (12 fonctions) - app/fiches/utils/tickets/*.py (11 fonctions) #### 2. Nommage variables (83) **Règle** : N803 **Priorité** : MOYENNE **Action** : Renommer `G` → `graph` dans toutes les fonctions **Impact** : Améliore la lisibilité, convention PEP8 #### 3. Utilisation de pathlib (24) **Règle** : PTH123, PTH118, PTH110, PTH103, PTH120, PTH122, PTH204 **Priorité** : BASSE **Action** : Remplacer os.path par pathlib.Path **Bénéfice** : API moderne, plus sûr, cross-platform #### 4. Assignations inutiles (17) **Règle** : RET504 **Priorité** : BASSE **Action** : Return directement sans variable temporaire **Exemple** : ```python # Avant result = calcul() return result # Après return calcul() ``` #### 5. Arguments non utilisés (10) **Règle** : ARG001 **Priorité** : BASSE **Action** : Préfixer par _ ou supprimer #### 6. Imports hors du début de fichier (9) **Règle** : E402 **Priorité** : BASSE **Action** : Déplacer imports en haut ou justifier #### 7. Autres (73) - Variables de boucle non utilisées (10 - B007) - Variables ambiguës (3 - E741) - Instructions multiples sur une ligne (4 - E701) - Simplifications possibles (56) ## Fichiers modifiés (46) ### Modules app/ - app/analyse/interface.py - app/analyse/sankey.py - app/fiches/generer.py - app/fiches/interface.py - app/fiches/utils/dynamic/**/*.py (12 fichiers) - app/fiches/utils/tickets/*.py (4 fichiers) - app/ia_nalyse/interface.py - app/personnalisation/*.py (3 fichiers) - app/plan_d_action/**/*.py (11 fichiers) - app/visualisations/*.py (2 fichiers) ### Modules utils/ - utils/gitea.py - utils/graph_utils.py - utils/logger.py - utils/persistance.py - utils/translations.py - utils/visualisation.py - utils/widgets.py ### Fichiers de configuration - pyproject.toml (nouveau) - .vscode/settings.json (mis à jour) ## Exemples de changements appliqués ### Exemple 1 : Annotations modernes ```python # Avant from typing import List, Dict, Optional, Tuple def ma_fonction(items: List[str], config: Optional[Dict[str, int]]) -> Tuple[int, str]: pass # Après def ma_fonction(items: list[str], config: dict[str, int] | None) -> tuple[int, str]: pass ``` ### Exemple 2 : Style docstrings ```python # Avant def ma_fonction(): """ Fait quelque chose. Returns: Le résultat """ pass # Après def ma_fonction(): """Fait quelque chose. Returns: Le résultat """ pass ``` ### Exemple 3 : Imports triés ```python # Avant import streamlit as st from typing import Dict import os import networkx as nx from config import GITEA_URL from utils.logger import setup_logger # Après import os from typing import Dict import networkx as nx import streamlit as st from config import GITEA_URL from utils.logger import setup_logger ``` ## Prochaines étapes recommandées ### Étape 1 : Ajouter docstrings (priorité HAUTE) **Temps estimé** : 3-4h **Fichiers prioritaires** : 1. utils/gitea.py 2. utils/graph_utils.py 3. app/plan_d_action/utils/data/plan_d_action.py 4. app/fiches/utils/tickets/*.py ### Étape 2 : Renommer G → graph (priorité MOYENNE) **Temps estimé** : 1h **Commande** : Recherche/remplacement avec vérification ### Étape 3 : Étendre les tests (priorité HAUTE) **Temps estimé** : 4-6h **Modules prioritaires** : - app/fiches/utils/ - app/plan_d_action/ - utils/gitea.py ### Étape 4 : Corrections mineures (priorité BASSE) **Temps estimé** : 2h - Migrer vers pathlib - Supprimer assignations inutiles - Nettoyer imports ## Commandes utiles ### Voir les problèmes par catégorie ```bash # Docstrings manquantes ruff check app/ utils/ --select D103 # Nommage variables ruff check app/ utils/ --select N803 # Problèmes pathlib ruff check app/ utils/ --select PTH ``` ### Vérifier un fichier spécifique ```bash ruff check app/plan_d_action/utils/data/plan_d_action.py ``` ### Statistiques ```bash ruff check app/ utils/ --statistics ``` ## Notes importantes 1. **Tests** : Les tests doivent être exécutés après ce commit pour valider les changements 2. **Modules exclus** : IA/, batch_ia/, pgpt/ (priorité basse) 3. **Compatibilité** : Toutes les corrections sont compatibles Python 3.10+ 4. **Rétrocompatibilité** : Pas de breaking changes fonctionnels ## Impact sur la qualité du code ### Avant - Annotations mixtes (typing.List et list) - Imports désorganisés - Docstrings incohérentes - Code Python 3.6-3.9 ### Après - Annotations uniformes (PEP 604) - Imports triés (PEP 8) - Docstrings Google Style - Code Python 3.10+ - 56% de problèmes résolus ## Avertissements - **17 RET504** : Assignations avant return (corrections disponibles avec --unsafe-fixes) - **46 corrections cachées** : Disponibles avec --unsafe-fixes (plus agressif) Pour appliquer ces corrections cachées : ```bash ruff check app/ utils/ --fix --unsafe-fixes ```