Code/docs/GUIDE_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

205 lines
5.7 KiB
Markdown

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