Address PR Review Suggestions¶
Overview¶
Récupère automatiquement tous les commentaires GitHub non résolus contenant des suggestions de changements depuis la PR de la branche courante, puis génère un plan récapitulatif structuré. Cette commande ne modifie aucun code - elle génère uniquement un plan que l'utilisateur pourra ensuite implémenter manuellement ou via d'autres commandes.
Mode d'exécution¶
IMPORTANT : Cette commande doit être exécutée en mode "plan" dans Cursor.
Avant d'exécuter cette commande, vous devez :
- Générer d'abord un plan structuré en utilisant l'outil
create_planou en présentant un plan détaillé à l'utilisateur - Ne pas modifier de fichiers jusqu'à ce que le plan soit approuvé par l'utilisateur
- Attendre la confirmation explicite de l'utilisateur avant d'exécuter les étapes de récupération des données
- Présenter le plan récapitulatif des suggestions trouvées sans appliquer de modifications
Le plan généré doit être clair, structuré et prêt à être utilisé comme référence pour l'implémentation ultérieure.
Steps¶
Note : Exécuter ces étapes en mode plan - générer d'abord un plan structuré avant toute action.
1. Identifier la PR courante¶
D'abord, identifier la PR associée à la branche Git courante (en lecture seule, sans modification) :
Si aucune PR n'est trouvée pour la branche courante, informer l'utilisateur qu'il doit être sur une branche avec une PR ouverte.
Extraire les informations suivantes :
number: numéro de la PRheadRefName: nom de la brancheurl: URL de la PRrepository.owner.login: propriétaire du reporepository.name: nom du repo
2. Récupérer les review threads non résolus¶
Utiliser l'API GraphQL de GitHub pour récupérer tous les review threads de la PR :
gh api graphql -f query='
query GetUnresolvedSuggestions($owner: String!, $repo: String!, $prNumber: Int!) {
repository(owner: $owner, name: $repo) {
pullRequest(number: $prNumber) {
reviewThreads(first: 100) {
pageInfo {
hasNextPage
endCursor
}
nodes {
isResolved
path
line
startLine
comments(first: 10) {
nodes {
body
bodyText
author {
login
}
createdAt
}
}
}
}
}
}
}' -f owner="$OWNER" -f repo="$REPO" -f prNumber=$PR_NUMBER
Filtrer uniquement les threads où isResolved == false - ce sont bien les commentaires non résolus qui seront inclus dans le plan.
3. Identifier et grouper les suggestions de changements¶
Pour chaque thread non résolu, analyser les commentaires pour détecter les suggestions :
- Parser le
bodydu commentaire pour détecter les suggestions GitHub natives - Rechercher les blocs de code avec le format
```suggestion ... ```dans le champbody - Extraire le code entre ces balises — c'est le code suggéré par le reviewer
-
Le
pathetline/startLinedu thread indiquent où appliquer la suggestion -
Grouper les commentaires par suggestion :
- Un thread peut contenir plusieurs commentaires (réponses, discussions)
- Grouper tous les commentaires d'un même thread ensemble car ils concernent la même suggestion
-
Pour chaque thread (suggestion), extraire :
- Fichier concerné (
path) - Ligne de code (
lineoustartLine) - Code actuel (lire le fichier à la ligne indiquée pour contexte, avec quelques lignes avant/après)
- Code suggéré (extrait du bloc
```suggestion ```dans lebody) - Tous les commentaires du thread (auteur, date, contenu textuel si présent)
- Auteur principal (
author.logindu premier commentaire avec suggestion) - Date de création (
createdAtdu premier commentaire)
- Fichier concerné (
-
Analyser la pertinence via la discussion du thread :
- Pour chaque thread non résolu (
isResolved == false) contenant au moins une réponse, analyser le contenu de la conversation pour déterminer si la suggestion a été effectivement traitée - Exclure le thread si la discussion indique clairement que le sujet est clos (accord mutuel, confirmation d'application, reviewer qui retire sa demande, etc.)
- Conserver le thread si : pas de réponse, désaccord non résolu, demande de précision en attente, ou dernier message qui insiste sur la suggestion
- En cas de doute, conserver le thread (mieux vaut présenter une suggestion déjà traitée que d'en manquer une pertinente)
4. Générer un plan structuré (mode plan)¶
À ce stade, vous devez utiliser l'outil create_plan pour générer un plan structuré que l'utilisateur pourra examiner avant toute action.
Créer un plan organisé par fichier avec le format suivant. IMPORTANT : Utiliser le format de citation de code Cursor pour créer des liens cliquables vers les fichiers et lignes.
Format type du plan :
# Plan d'application des suggestions de review
## PR: #{PR_NUMBER} - {PR_TITLE}
**Branche:** {BRANCH_NAME} | **URL:** {PR_URL}
### Résumé
- **Suggestions trouvées:** {nombre_total}
- **Suggestions exclues (résolues par discussion):** {nombre_exclus}
- **Fichiers concernés:** {nombre_fichiers}
---
## {chemin/vers/fichier}
### Suggestion - Ligne {line}
```{startLine}:{endLine}:{chemin/vers/fichier}
{code_actuel_avec_contexte_quelques_lignes_avant_et_après}
```
**Auteur:** @{author} | **Date:** {createdAt}
**Code suggéré:**
```{langage}
{code_suggéré}
```
{Si_commentaires_textuels_presents:}
**Commentaires:**
- @{author1}: {contenu_commentaire}
- @{author2}: {contenu_commentaire}
---
### Suggestion - Ligne {line}
```{startLine}:{endLine}:{chemin/vers/fichier}
{code_actuel_avec_contexte}
```
**Auteur:** @{author} | **Date:** {createdAt}
**Code suggéré:**
```{langage}
{code_suggéré}
```
---
Règles de formatage :
-
Liens cliquables : Utiliser le format de citation Cursor
```{startLine}:{endLine}:{filepath} ... ```directement dans le plan pour chaque suggestion. Le code affiché dans le lien doit inclure quelques lignes de contexte avant et après la ligne concernée. -
Structure :
- Un résumé en haut avec le nombre total de suggestions et fichiers
- Grouper par fichier
- Pour chaque suggestion, afficher le lien cliquable avec le code actuel, puis le code suggéré
- Afficher auteur et date sur une seule ligne séparés par
| -
Ne pas afficher de Thread ID ou autres métadonnées techniques
-
Commentaires : Afficher les commentaires textuels uniquement s'ils apportent des informations supplémentaires (pas juste le code suggéré)
-
Lisibilité : Format concis, pas de sections redondantes, focus sur l'essentiel (fichier, ligne, code actuel, code suggéré)
5. Organiser les suggestions¶
- Grouper toutes les suggestions par fichier
- Grouper les commentaires par suggestion : Tous les commentaires d'un même thread (même
pathetline) doivent être regroupés ensemble car ils concernent la même suggestion - Pour chaque fichier, trier les suggestions par numéro de ligne (du haut vers le bas)
- Indiquer le nombre total de suggestions par fichier
- Créer une checklist pour suivre l'application (à remplir manuellement par l'utilisateur)
6. Générer le plan récapitulatif¶
Créer un plan récapitulatif en suivant exactement le format type défini dans la section 4. Le plan doit être :
- Concis et lisible : Pas de métadonnées inutiles, focus sur l'essentiel
- Structuré : Résumé en haut, puis groupé par fichier
- Avec liens cliquables : Chaque suggestion doit avoir un lien cliquable vers le fichier et la ligne (format de citation Cursor)
- Sans Thread ID : Ne jamais afficher de Thread ID ou autres IDs techniques
- Format cohérent : Suivre exactement le format type fourni dans la section 4
Checklist d'exécution (mode plan)¶
Phase 1 : Génération du plan (sans modification)
- [ ] Identifier la PR courante (lecture seule)
- [ ] Récupérer les review threads non résolus (lecture seule via API)
- [ ] Filtrer les threads avec suggestions
- [ ] Analyser la discussion de chaque thread pour déterminer si la suggestion est encore pertinente
- [ ] Extraire les détails de chaque suggestion (fichier, ligne, code actuel, code suggéré)
- [ ] Grouper les commentaires par suggestion (regrouper les commentaires d'un même thread)
- [ ] Organiser les suggestions par fichier
- [ ] Créer des liens cliquables vers les fichiers et lignes (format de citation Cursor avec code actuel affiché dedans)
- [ ] Ne pas inclure de Thread ID ou autres métadonnées techniques dans le plan
- [ ] Générer le plan structuré avec l'outil
create_plan - [ ] Présenter le plan récapitulatif à l'utilisateur pour examen
- [ ] Attendre la confirmation de l'utilisateur avant toute action supplémentaire
Phase 2 : Implémentation (après approbation du plan)
- Cette phase sera exécutée par l'utilisateur ou via d'autres commandes Cursor après examen du plan
Notes importantes¶
- Cette commande doit être exécutée en mode "plan" - générer d'abord un plan structuré avant toute action
- Cette commande ne modifie aucun code - elle génère uniquement un plan récapitulatif
- Utiliser l'outil
create_planpour créer le plan structuré que l'utilisateur pourra examiner - Toutes les opérations de récupération de données doivent être en lecture seule (pas de modifications de fichiers)
- L'utilisateur devra ensuite décider comment implémenter les suggestions (manuellement ou via d'autres commandes)
- Certaines suggestions peuvent être obsolètes si le code a changé depuis la review - vérifier le contexte avant application
- Si plusieurs suggestions concernent la même ligne, les présenter dans l'ordre chronologique (plus ancienne en premier)