claude-code-ultimate-guide/examples/commands/pr.md
Florian BRUNIAUX 91d36f00dd docs(examples): add YAML frontmatter to 20 command templates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 19:20:36 +01:00

200 lines
5.3 KiB
Markdown

---
name: pr
description: "Analyze changes, detect scope issues, and create a well-structured PR"
---
# Create Pull Request
Analyze changes, detect scope issues, and create a well-structured PR following project conventions.
## Process
1. **Analyze Changes**: Calculate complexity score from files, commits, and directories
2. **Detect Scope Issues**: Warn if PR is too large or mixes unrelated changes
3. **Suggest Split**: If needed, group commits by scope and propose separate PRs
4. **Collect Info**: Ask for type, target branch, draft status, labels
5. **Generate Content**: Create TLDR + description + checklist
6. **Create PR**: Execute `gh pr create` with proper formatting
7. **Remind Follow-up**: Display post-PR checklist (SonarQube, Claude Review)
## Complexity Score
Calculate PR complexity to detect if split is needed:
| Criterion | Weight | Description |
|-----------|--------|-------------|
| Code files | x2 | `*.ts, *.tsx` (excluding tests) |
| Test files | x0.5 | `*.test.ts, *.spec.ts` |
| Config files | x1 | `*.json, *.yml, *.md` |
| Directories | x3 | Distinct `src/*` directories |
| Commits | x1 | Number of commits |
**Thresholds**: 0-15 ✅ Normal | 16-25 ⚠️ Large | 26+ 🔴 Split recommended
## Scope Coherence
| Pattern | Verdict |
|---------|---------|
| Single scope | ✅ OK |
| Related scopes (sessions + calendar) | ✅ OK |
| Unrelated scopes (payments + auth) | 🔴 Split |
| feat + fix same scope | ✅ OK |
| feat + fix different scopes | 🔴 Split |
## Split Suggestion Format
When split is recommended, display:
```
🔴 Scope trop large (score: 32)
Commits par scope :
├── payments (5 commits, 8 fichiers)
│ ├── feat(payments): add Stripe checkout
│ └── fix(payments): handle currency
└── notifications (3 commits, 6 fichiers)
└── feat(notifications): add email templates
💡 Suggestion :
1. PR #1 : feature/payments-stripe → Commits payments
2. PR #2 : feature/notifications → Commits notifications
Options :
[A] Continuer avec une seule PR (non recommandé)
[B] Découper (semi-auto - commandes git fournies)
[C] Voir détail fichiers
```
**Semi-auto split** provides copy-paste commands:
```bash
git checkout develop
git checkout -b feature/payments-stripe
git cherry-pick abc1234 def5678
git push -u origin feature/payments-stripe
```
## Questions to Ask
1. **Type**: feature | fix | tech | docs | security
2. **Target Branch**: Show recent branches (develop, main, others)
3. **Draft**: Yes (WIP) | No (ready for review)
4. **Labels**: Based on type + optional (breaking-change, security)
## PR Title Format
```
<type>(<scope>): <description>
```
Examples:
- `feat(payments): add Stripe checkout integration`
- `fix(sessions): resolve timezone calculation bug`
## PR Body Template
```markdown
## TLDR
<!-- 2 lines max - Executive summary -->
---
## Type
{Feature | Fix | Tech | Docs | Security}
## Description
{Context and changes}
## Technical Changes
{List of main modifications}
## Tests
- [ ] Unit tests added/passing
- [ ] Manual testing completed
## Checklist
- [ ] Code follows conventions
- [ ] No console.log left
- [ ] Types OK (`pnpm typecheck`)
---
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
```
## Available Labels
| Label | Color | Use When |
|-------|-------|----------|
| `feature` | 🟢 | New functionality |
| `fix` | 🔴 | Bug fix |
| `tech` | 🔵 | Refactoring, tech debt |
| `docs` | 📘 | Documentation only |
| `security` | 🟣 | Security fix |
| `breaking-change` | ⚫ | Breaking changes |
| `WIP` | 🟡 | Work in progress (draft) |
## Commands to Execute
```bash
# 1. Get base branch (usually develop)
BASE_BRANCH="develop"
# 2. Calculate complexity score
CODE=$(git diff --name-only $BASE_BRANCH..HEAD | grep -E '\.(ts|tsx)$' | grep -v test | wc -l)
TESTS=$(git diff --name-only $BASE_BRANCH..HEAD | grep -E '\.test\.|\.spec\.' | wc -l)
DIRS=$(git diff --name-only $BASE_BRANCH..HEAD | cut -d'/' -f1-2 | sort -u | wc -l)
COMMITS=$(git rev-list --count $BASE_BRANCH..HEAD)
SCORE=$((CODE * 2 + TESTS / 2 + DIRS * 3 + COMMITS))
# 3. Get scopes from commits
git log --oneline $BASE_BRANCH..HEAD --format="%s" | sed -n 's/^\w*(\([^)]*\)).*/\1/p' | sort | uniq -c
# 4. Recent branches for selection
git branch --sort=-committerdate --format='%(refname:short)' | head -5
# 5. Create PR
gh pr create \
--title "<type>(<scope>): <description>" \
--body "$BODY" \
--base $BASE_BRANCH \
--label "<label>" \
--draft # if WIP
```
## Post-PR Output
After PR creation, ALWAYS display:
```
✅ PR créée : https://github.com/org/repo/pull/XXX
📋 Prochaines étapes automatiques :
• SonarQube analysera la qualité du code (bugs, vulnérabilités, code smells)
• Claude Code Review fournira un feedback IA sur votre PR
⏳ Pensez à surveiller ces analyses dans les prochaines minutes.
Si des problèmes sont détectés, corrigez-les avant de demander une review humaine.
```
## Edge Cases
| Situation | Behavior |
|-----------|----------|
| No scope in commits | Analyze by directories |
| Non-conventional commits | Warn + ask type manually |
| No commits (same as base) | Error: "Aucun changement" |
| Single commit | Use commit message as title |
| Merge commits | Ignore (`--no-merges`) |
## Usage
```
/pr
/pr --base main
/pr --draft
```
Target: $ARGUMENTS (optional: --base, --draft)