# Guide d'utilisation de Ruff ## Configuration effectuee J'ai configure Ruff pour votre projet FabNum avec deux fichiers : ### 1. pyproject.toml Configuration principale de Ruff avec : - **Longueur de ligne** : 120 caractères maximum - **Exclusions** : pgpt/, IA/, batch_ia/ (modules priorite basse) - **Regles activees** : - Erreurs de style (pycodestyle) - Detection de bugs (pyflakes, bugbear) - **Docstrings obligatoires** (pydocstyle) - Tri automatique des imports (isort) - Simplifications de code - Detection de code mort ### 2. .vscode/settings.json Configuration VSCodium pour : - Formattage automatique avec Ruff - Organisation des imports au save - Detection des problemes en temps reel - Integration avec pytest ## Utilisation dans VSCodium ### Actions automatiques Lorsque vous ouvrez un fichier Python, Ruff va : - Souligner en rouge/jaune les problemes detectes - Proposer des corrections rapides (Quick Fix) - Organiser les imports quand vous sauvegardez ### Actions manuelles **Voir tous les problemes** : - Panneau "Problemes" (Ctrl+Shift+M) - Filtre par fichier, par type (erreur/warning) **Corriger automatiquement** : 1. Clic droit sur le code souligne 2. "Quick Fix..." (Ctrl+.) 3. Selectionner "Ruff: Fix all auto-fixable problems" **Organiser les imports** : - Clic droit > "Organiser les imports" - Ou sauvegarde automatique (deja configure) **Formater un fichier** : - Clic droit > "Formater le document" - Ou Shift+Alt+F ## Regles principales pour les docstrings Ruff va exiger des docstrings au format Google : ### Fonction simple ```python def calculer_ivc(graph, node): """Calcule l'indice de vulnerabilite competitive pour un noeud. Args: graph: Le graphe NetworkX contenant les donnees. node: L'identifiant du noeud a analyser. Returns: float: La valeur IVC calculee. Raises: ValueError: Si le noeud n'existe pas dans le graphe. """ # code... ``` ### Fonction complexe avec exemples ```python def synchroniser_gitea(repo_name, force=False): """Synchronise les donnees locales avec le depot Gitea. Cette fonction compare les timestamps locaux et distants pour determiner si une synchronisation est necessaire. En mode force, ignore le cache. Args: repo_name: Nom du depot Gitea (DEPOT_FICHES ou DEPOT_CODE). force: Si True, force la synchronisation meme si le cache est valide. Returns: dict: Dictionnaire avec les cles : - 'synced': bool, True si synchronisation effectuee - 'files_updated': int, nombre de fichiers mis a jour - 'timestamp': str, horodatage de la synchronisation Raises: ConnectionError: Si impossible de contacter le serveur Gitea. ValueError: Si repo_name n'est pas reconnu. Example: >>> result = synchroniser_gitea('DEPOT_FICHES', force=True) >>> print(result['files_updated']) 12 """ # code... ``` ### Classe ```python class GraphAnalyzer: """Analyseur de graphes pour les chaines d'approvisionnement. Cette classe fournit des methodes pour analyser les dependances et calculer les indices de risque sur un graphe NetworkX. Attributes: graph: Le graphe NetworkX a analyser. config: Configuration des seuils et parametres. """ def __init__(self, graph, config=None): """Initialise l'analyseur avec un graphe. Args: graph: Graphe NetworkX des dependances. config: Configuration optionnelle (dict). """ # code... ``` ## Ce que Ruff va detecter ### Problemes de docstrings - Fonctions publiques sans docstring - Docstrings mal formatees - Arguments non documentes - Valeurs de retour non documentees ### Problemes de code - Imports non utilises - Variables definies mais jamais utilisees - Code mort (apres return/break) - Comparaisons dangereuses (== None au lieu de is None) - Lignes trop longues (>120 caracteres) - Complexite trop elevee ### Suggestions d'amelioration - Utiliser pathlib au lieu de os.path - Simplifier les comprehensions - Utiliser f-strings au lieu de .format() - Remplacer list() + comprehension par comprehension directe ## Commandes utiles (si Ruff CLI installe) Si vous souhaitez installer Ruff en ligne de commande : ```bash pip install ruff # Verifier tout le projet ruff check app/ utils/ # Corriger automatiquement ce qui peut l'etre ruff check app/ utils/ --fix # Voir les statistiques ruff check app/ utils/ --statistics # Formater le code ruff format app/ utils/ ``` ## Prochaines etapes 1. **Rechargez VSCodium** pour que la configuration prenne effet 2. **Ouvrez un fichier Python** (ex: app/fiches/interface.py) 3. **Regardez le panneau Problemes** (Ctrl+Shift+M) 4. Vous verrez la liste des problemes detectes par Ruff Ruff va vous guider pour : - Ajouter les docstrings manquantes - Corriger les problemes de style - Ameliorer la qualite du code ## Questions frequentes **Q: Trop de problemes affiches, c'est normal ?** R: Oui, la premiere fois Ruff peut detecter beaucoup de choses. Traitez-les progressivement, module par module. **Q: Puis-je desactiver certaines regles ?** R: Oui, editez pyproject.toml, section [tool.ruff.lint] > ignore. **Q: Comment ignorer un warning sur une ligne specifique ?** R: Ajoutez un commentaire : `# noqa: CODE` (ex: `# noqa: D103` pour ignorer docstring manquante) **Q: formatOnSave est a false, pourquoi ?** R: Pour eviter de reformater tout le code d'un coup. Vous pouvez le mettre a true quand vous serez pret. ## Fichiers de configuration - **pyproject.toml** : Configuration Ruff (regles, exclusions, style) - **.vscode/settings.json** : Integration VSCodium - **requirements.txt** : Dependances Python (existe deja) ## Support Pour plus d'informations : https://docs.astral.sh/ruff/