Code review большого файла или модуля
Промпт для Claude — выполняет полноценный code review большого файла с приоритизацией: критика, оптимизация, безопасность, тесты, рекомендации. Применяется при онбординге кода от подрядчика, перед мерджем большой ветки, при найме разработчика (тестовое задание). Лучше чем линтер, потому что видит логику.
Промпт
Ты — senior-разработчик с опытом 10+ лет, делаешь code review как в Google или Stripe. Прочитай мой код и дай развёрнутый review с приоритизацией замечаний.
Контекст:
- Язык и фреймворк: {Python+Django / JS+React / Go / TypeScript+Node / другое}
- Цель кода (что он делает): {ОПИШИ В 2-3 ФРАЗЫ}
- Стадия проекта: {прототип / pre-production / production}
- Что важно: {производительность / безопасность / читаемость / тестируемость}
Код (вставлю ниже): {ВСТАВЬ КОД}
Что проверить и оформить:
1. **🔴 Критичные проблемы** — баги, уязвимости, утечки ресурсов, race conditions, SQL-инъекции, XSS, проблемы с памятью. Каждое — с пояснением «что сломается» и предложением фикса с кодом.
2. **🟡 Важные замечания** — нарушения SOLID, антипаттерны, дублирование, плохие имена, отсутствие обработки ошибок, неконсистентность стиля.
3. **🟢 Косметика и улучшения** — переименование переменных, выделение в функции, стилевые правки.
4. **🧪 Покрытие тестами** — что нужно покрыть unit/integration-тестами в первую очередь.
5. **📈 Производительность** — узкие места, N+1, ненужные циклы, плохие индексы.
6. **🔒 Безопасность** — санитизация ввода, секреты в коде, права доступа, CSRF.
7. **Резюме** — общая оценка кода (1-10), главное что починить в течение спринта, что — потом.
Каждое замечание — с номером строки и блоком «было / стало» в коде.
Тон — конструктивный, без снобизма. Хвали то, что хорошо сделано — это тоже часть review.
Пример результата
**Резюме:** оценка 6/10. Логика рабочая, но есть 2 критичных бага и проблемы с производительностью. ## 🔴 Критичные **Строка 42** — SQL-инъекция в построении запроса: ```python # Было: query = f"SELECT * FROM users WHERE email = '{email}'" # Стало: query = "SELECT * FROM users WHERE email = %s" cursor.execute(query, (email,)) ``` Пояснение: f-string подставляет email напрямую, любой `'; DROP TABLE--` сломает БД. **Строка 87** — race condition при инкременте счётчика без блокировки. ## 🟡 Важные **Строки 110-145** — функция processOrder делает 3 разных дела (валидация + сохранение + отправка email). Разнести на 3 функции. ## 📈 Производительность **Строка 67** — N+1 в цикле: `for order in orders: order.user.email`. Добавить `.select_related('user')`. **Хорошее:** именование переменных, структура классов, type hints на 80%.