Initial commit
This commit is contained in:
172
commands/pr-review.md
Normal file
172
commands/pr-review.md
Normal file
@@ -0,0 +1,172 @@
|
||||
## PR Review
|
||||
|
||||
Assure la qualité du code et la solidité architecturale grâce à des revues systématiques de Pull Requests.
|
||||
|
||||
### Utilisation
|
||||
|
||||
```bash
|
||||
# Revue complète de PR
|
||||
gh pr view 123 --comments
|
||||
"Systematically review this PR and provide feedback from code quality, security, and architecture perspectives"
|
||||
|
||||
# Revue axée sur la sécurité
|
||||
gh pr diff 123
|
||||
"Focus on reviewing security risks and vulnerabilities"
|
||||
|
||||
# Revue de perspective architecturale
|
||||
gh pr checkout 123 && find . -name "*.js" | head -10
|
||||
"Evaluate the architecture from the perspectives of layer separation, dependencies, and SOLID principles"
|
||||
```
|
||||
|
||||
### Exemples de base
|
||||
|
||||
```bash
|
||||
# Évaluation quantitative de la qualité du code
|
||||
find . -name "*.js" -exec wc -l {} + | sort -rn | head -5
|
||||
"Evaluate code complexity, function size, and duplication, and point out improvements"
|
||||
|
||||
# Vérification des vulnérabilités de sécurité
|
||||
grep -r "password\|secret\|token" . --include="*.js" | head -10
|
||||
"Check for risks of sensitive information leakage, hardcoding, and authentication bypass"
|
||||
|
||||
# Détection de violations architecturales
|
||||
grep -r "import.*from.*\.\./\.\." . --include="*.js"
|
||||
"Evaluate layer violations, circular dependencies, and coupling issues"
|
||||
```
|
||||
|
||||
### Système de classification des commentaires
|
||||
|
||||
```text
|
||||
🔴 critical.must : Questions critiques
|
||||
├─ Vulnérabilités de sécurité
|
||||
├─ Problèmes d'intégrité des données
|
||||
└─ Risques de panne système
|
||||
|
||||
🟡 high.imo : Améliorations haute priorité
|
||||
├─ Risque de dysfonctionnement
|
||||
├─ Problèmes de performance
|
||||
└─ Diminution significative de la maintenabilité
|
||||
|
||||
🟢 medium.imo : Améliorations priorité moyenne
|
||||
├─ Amélioration de la lisibilité
|
||||
├─ Amélioration de la structure du code
|
||||
└─ Amélioration de la qualité des tests
|
||||
|
||||
🟢 low.nits : Points mineurs
|
||||
├─ Unification du style
|
||||
├─ Corrections de typos
|
||||
└─ Ajout de commentaires
|
||||
|
||||
🔵 info.q : Questions/informations
|
||||
├─ Confirmation d'intention d'implémentation
|
||||
├─ Contexte des décisions de conception
|
||||
└─ Partage de bonnes pratiques
|
||||
```
|
||||
|
||||
### Perspectives de revue
|
||||
|
||||
#### 1. Correction du code
|
||||
|
||||
- **Erreurs logiques** : Valeurs limites, vérifications null, gestion des exceptions
|
||||
- **Intégrité des données** : Sécurité de type, validation
|
||||
- **Gestion d'erreurs** : Complétude, traitement approprié
|
||||
|
||||
#### 2. Sécurité
|
||||
|
||||
- **Authentification/autorisation** : Vérifications appropriées, gestion des permissions
|
||||
- **Validation d'entrée** : Contremesures injection SQL, XSS
|
||||
- **Informations sensibles** : Restrictions de journalisation, chiffrement
|
||||
|
||||
#### 3. Performance
|
||||
|
||||
- **Algorithmes** : Complexité temporelle, efficacité mémoire
|
||||
- **Base de données** : Requêtes N+1, optimisation d'index
|
||||
- **Ressources** : Fuites mémoire, utilisation du cache
|
||||
|
||||
#### 4. Architecture
|
||||
|
||||
- **Séparation des couches** : Direction des dépendances, séparation appropriée
|
||||
- **Couplage** : Couplage serré, utilisation d'interfaces
|
||||
- **Principes SOLID** : Responsabilité unique, ouvert-fermé, inversion de dépendances
|
||||
|
||||
### Flux de revue
|
||||
|
||||
1. **Pré-vérification** : Informations PR, diff des changements, issues liées
|
||||
2. **Vérifications systématiques** : Sécurité → Correction → Performance → Architecture
|
||||
3. **Feedback constructif** : Suggestions d'amélioration spécifiques et exemples de code
|
||||
4. **Suivi** : Confirmation des corrections, statut CI, approbation finale
|
||||
|
||||
### Exemples de commentaires efficaces
|
||||
|
||||
#### Problèmes de sécurité
|
||||
|
||||
**Format :**
|
||||
|
||||
```text
|
||||
**critical.must.** [Description du problème de sécurité]
|
||||
|
||||
[Code ou solution proposée]
|
||||
|
||||
[Explication de la nécessité]
|
||||
```
|
||||
|
||||
**Exemple :**
|
||||
|
||||
```text
|
||||
**critical.must.** Le mot de passe est stocké en texte brut
|
||||
|
||||
// Correction proposée
|
||||
const bcrypt = require('bcrypt');
|
||||
const hashedPassword = await bcrypt.hash(password, 12);
|
||||
|
||||
Le hachage est requis pour prévenir les risques de sécurité.
|
||||
```
|
||||
|
||||
#### Amélioration des performances
|
||||
|
||||
**Format :**
|
||||
|
||||
```text
|
||||
**high.imo.** [Description du problème de performance]
|
||||
|
||||
[Code d'amélioration proposé]
|
||||
|
||||
[Explication de l'impact]
|
||||
```
|
||||
|
||||
**Exemple :**
|
||||
|
||||
```text
|
||||
**high.imo.** Problème de requête N+1 survient
|
||||
|
||||
// Amélioration : Chargement anticipé
|
||||
const users = await User.findAll({ include: [Post] });
|
||||
|
||||
Ceci peut réduire significativement le nombre de requêtes.
|
||||
```
|
||||
|
||||
#### Violation architecturale
|
||||
|
||||
**Format :**
|
||||
|
||||
```text
|
||||
**high.must.** [Description de la violation]
|
||||
|
||||
[Explication et solution recommandée]
|
||||
```
|
||||
|
||||
**Exemple :**
|
||||
|
||||
```text
|
||||
**high.must.** Violation de couche survenue
|
||||
|
||||
La couche domaine dépend directement de la couche infrastructure.
|
||||
Veuillez introduire une interface suivant le principe d'inversion de dépendances.
|
||||
```
|
||||
|
||||
### Notes
|
||||
|
||||
- **Ton constructif** : Communication collaborative plutôt qu'agressive
|
||||
- **Suggestions spécifiques** : Fournir des solutions en plus de signaler les problèmes
|
||||
- **Priorisation** : Traiter dans l'ordre Critique → Haute → Moyenne → Basse
|
||||
- **Amélioration continue** : Documenter les résultats de revue dans une base de connaissances
|
||||
Reference in New Issue
Block a user