Skills Development Analyze Changes and Create Pull Request

Analyze Changes and Create Pull Request

v20260730
pr
This utility analyzes code changes within a branch compared to the base branch. It calculates a complexity score, detects scope coherence issues (warning if changes are too large or unrelated), and generates a fully structured Pull Request (PR) draft. It automates the creation of titles, comprehensive descriptions (including checklists and technical details), and even suggests splitting the PR into smaller, manageable units, significantly improving code review quality and efficiency.
Get Skill
116 downloads
Overview

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:

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

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

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

Info
Category Development
Name pr
Version v20260730
Size 5.51KB
Updated At 2026-08-04
Language