Code Review, Refactor, and Optimization
Use Claude as a code reviewer: pattern detection, refactor suggestions, performance tuning, and security review.
Şükrü Yusuf KAYA
12 min read
IntermediateClaude — Kıdemli Reviewer
Claude'u sadece kod yazmak için değil incelemek için kullan. İyi review prompt'u şu üç katmandan oluşur:
- Bağlam: Bu PR ne yapıyor? Hangi sistemde?
- İlke: Hangi standartlara göre değerlendiriyor? (style guide, perf bütçe, güvenlik)
- Çıktı: Yapılandırılmış review (block / line yorumlu).
text
<role>Sen kıdemli bir Python + TypeScript reviewer'sın.</role> <project_context>Backend: FastAPI + PostgresFrontend: Next.js 15 + TS strictTesting: pytest, vitestStyle: ruff + black + eslint + prettierPerformans bütçesi: API p99 < 300ms</project_context> <review_rubric>1. Doğruluk2. Edge case kapsamı3. Test coverage4. Performans5. Güvenlik (özellikle injection, authz)6. Okunabilirlik7. Convention uyumu</review_rubric> <output_format>{ "summary": "...", "blocking_issues": [{"file":"...","line":...,"severity":"high|med|low","comment":"..."}], "non_blocking_suggestions": [...], "praise": [...]}</output_format> <diff>{{git_diff}}</diff>Üretim seviyesi review prompt'u — JSON çıktıyı CI'da parse edersin.
python · diff modu
Senin kodun
Hedefe karşı diff
+ # Sonra — Claude'un önerdiği refactor:+ def get_user(uid: str) -> dict | None:+ """Fetch a user by id. Returns None if not found."""+ with db.cursor() as cur:+ cur.execute("SELECT * FROM users WHERE id = %s", (uid,))+ row = cur.fetchone()+ return dict(row) if row else None- # Önce — issues:- def get_user(uid):- cur = db.cursor()- cur.execute("SELECT * FROM users WHERE id = '" + uid + "'")- return cur.fetchone()
SQL injection + bağlam yönetimi + tip imzası + docstring birlikte düzeltiliyor.
Hot path mikrobenchmark#
Claude'un önerdiği iki refactor seçeneğini karşılaştırmak için lokal mikrobenchmark.
python
import timeit def opt1(data): return [x * 2 for x in data if x > 0] def opt2(data): out = [] for x in data: if x > 0: out.append(x * 2) return out veri = list(range(1, 100_000))print("opt1:", timeit.timeit(lambda: opt1(veri), number=200))print("opt2:", timeit.timeit(lambda: opt2(veri), number=200))Boşluk doldur · text
İyi bir review prompt'u üç katmandan oluşur: _____ , ilke ve çıktı formatı. Güvenlik review'ında _____ Top 10 lensini öner. Üretimde review çıktısını CI'da _____ olarak parse et.Frequently Asked Questions
Yes. On PR open, send the diff to Claude, parse JSON output in your pipeline, and fail CI on blocking issues. Common pattern with GitHub Actions.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...