Code to PR Description
Generate a clear, professional pull request description from your code changes. Explain what changed, why, and how to test it -- in seconds.
3 stepsWorkflow Steps
Paste the Code Diff
Copy your git diff or the key code changes from your branch. Include file names and enough context for Echoo to understand the scope.
command: code-improverAnalyze the Changes
Echoo reads the diff and identifies what was added, modified, or removed, and infers the purpose behind the changes.
command: code-improverWrite Professional Description
Generate a structured PR description with a summary, list of changes, testing notes, and any migration steps.
command: professional-tone
Example
Input
// auth.ts - added rate limiting to login endpoint - import { login } from './handlers'; + import { login, rateLimiter } from './handlers'; - app.post('/api/login', login); + app.post('/api/login', rateLimiter({ maxAttempts: 5, windowMs: 900000 }), login); // rateLimiter.ts - new file + export const rateLimiter = ({ maxAttempts, windowMs }) => { + const attempts = new Map(); + return (req, res, next) => { + const key = req.ip; + const record = attempts.get(key) || { count: 0, resetAt: Date.now() + windowMs }; + if (Date.now() > record.resetAt) { record.count = 0; record.resetAt = Date.now() + windowMs; } + record.count++; + attempts.set(key, record); + if (record.count > maxAttempts) return res.status(429).json({ error: 'Too many login attempts' }); + next(); + }; + };
Output
## Add Rate Limiting to Login Endpoint ### Summary Implements IP-based rate limiting on the `/api/login` endpoint to prevent brute-force authentication attacks. ### Changes - **New file:** `rateLimiter.ts` -- reusable rate limiting middleware - **Modified:** `auth.ts` -- applied rate limiter to login route ### How It Works - Tracks login attempts per IP address using an in-memory Map - Allows 5 attempts per 15-minute window - Returns `429 Too Many Requests` when limit is exceeded - Window resets automatically after expiry ### Testing 1. Attempt login 5 times with wrong credentials -- should succeed 2. Attempt a 6th time -- should receive 429 response 3. Wait 15 minutes (or mock timer) -- should reset and allow attempts again ### Notes - In-memory storage means rate limits reset on server restart. Consider Redis for production multi-instance deployments.
Tips
Include the full diff rather than cherry-picked lines for accurate descriptions.
Mention the ticket or issue number in your prompt so Echoo includes it in the PR description.
For large PRs, break the diff into logical sections and describe each one.
Ask for a "reviewer guide" if you want to highlight which files to review most carefully.
Frequently Asked Questions
Yes. Echoo infers testable scenarios from the code changes and includes step-by-step testing instructions in the PR description.
Specify your team's PR template structure in the prompt (e.g., "use our template: Summary, Changes, Screenshots, Testing") and Echoo will follow it.
Yes. Echoo understands diffs from any programming language and tailors the description to the framework conventions it detects.
Explore More
Ready to Try It?
Download Echoo and start automating text workflows with AI shortcuts.