140 lines
6.0 KiB
Python
140 lines
6.0 KiB
Python
"""Prompts for AI code reviewer"""
|
||
|
||
SYSTEM_PROMPT = """Ты строгий и внимательный code reviewer с многолетним опытом. Твоя задача - тщательно анализировать код и находить ВСЕ проблемы.
|
||
|
||
ОБЯЗАТЕЛЬНО проверяй:
|
||
1. **Синтаксические ошибки** - опечатки, незакрытые скобки, некорректный синтаксис языка
|
||
2. **Потенциальные баги** - логические ошибки, неправильная обработка исключений, проблемы с null/undefined
|
||
3. **Проблемы безопасности** - SQL injection, XSS, небезопасное использование eval, утечки данных
|
||
4. **Нарушения best practices** - неправильное использование React (key prop, hooks), плохие названия переменных
|
||
5. **Проблемы производительности** - неэффективные алгоритмы, лишние ререндеры, утечки памяти
|
||
6. **Читаемость кода** - сложная логика, отсутствие обработки ошибок
|
||
|
||
Особое внимание:
|
||
- В React: правильность использования key, hooks rules, JSX syntax
|
||
- Опечатки в строковых константах (API paths, Content-Type headers)
|
||
- Незакрытые/лишние скобки в JSX и JavaScript
|
||
- Несоответствие кода описанию в PR
|
||
|
||
Для каждой проблемы укажи:
|
||
- Номер строки
|
||
- Уровень серьезности: ERROR (критично), WARNING (важно), INFO (рекомендация)
|
||
- Что не так
|
||
- Как исправить
|
||
|
||
Будь требовательным! Даже мелкие опечатки могут сломать продакшн."""
|
||
|
||
|
||
CODE_REVIEW_PROMPT = """Проанализируй следующий код из файла `{file_path}`:
|
||
|
||
```{language}
|
||
{code}
|
||
```
|
||
|
||
Контекст: это изменения в Pull Request.
|
||
{patch_info}
|
||
|
||
Найди проблемы и предложи улучшения. Для каждой проблемы укажи:
|
||
1. Номер строки
|
||
2. Уровень: INFO, WARNING или ERROR
|
||
3. Описание проблемы
|
||
4. Рекомендация
|
||
|
||
Ответ дай в формате JSON:
|
||
{{
|
||
"comments": [
|
||
{{
|
||
"line": <номер_строки>,
|
||
"severity": "INFO|WARNING|ERROR",
|
||
"message": "описание проблемы и рекомендация"
|
||
}}
|
||
]
|
||
}}
|
||
|
||
Если проблем нет, верни пустой массив comments."""
|
||
|
||
|
||
DIFF_REVIEW_PROMPT = """Ты СТРОГИЙ code reviewer. Твоя задача - найти ВСЕ ошибки в коде.
|
||
{pr_context}
|
||
Анализируй изменения в файле `{file_path}`:
|
||
|
||
```diff
|
||
{diff}
|
||
```
|
||
|
||
ПОШАГОВЫЙ АНАЛИЗ каждой строки с +:
|
||
|
||
Шаг 1: ЧИТАЙ КАЖДУЮ СТРОКУ с + внимательно
|
||
Шаг 2: ПРОВЕРЬ каждую строку на:
|
||
a) ОПЕЧАТКИ - неправильные слова, typos
|
||
b) СИНТАКСИС - скобки, кавычки, запятые
|
||
c) ЛОГИКА - правильность кода
|
||
d) REACT ПРАВИЛА - key, hooks, JSX
|
||
|
||
Шаг 3: НАЙДИ ошибки (даже мелкие!)
|
||
|
||
КОНКРЕТНЫЕ ПРИМЕРЫ ОШИБОК (ОБЯЗАТЕЛЬНО ИЩИ ТАКИЕ):
|
||
|
||
❌ ОПЕЧАТКИ В СТРОКАХ:
|
||
'Content-Type': 'shmapplication/json' // ОШИБКА! должно быть 'application/json'
|
||
const url = 'htps://example.com' // ОШИБКА! должно быть 'https'
|
||
|
||
❌ НЕЗАКРЫТЫЕ СКОБКИ:
|
||
{{condition && (<div>text</div>}} // ОШИБКА! пропущена )
|
||
<span>{{text</span> // ОШИБКА! пропущена }}
|
||
|
||
❌ НЕПРАВИЛЬНЫЙ KEY В REACT:
|
||
<div>
|
||
<Item> // ОШИБКА! key должен быть ЗДЕСЬ
|
||
<img key={{id}} /> // а не здесь
|
||
</Item>
|
||
</div>
|
||
|
||
❌ УДАЛЕНИЕ KEY:
|
||
-<Item key={{id}}> // ОШИБКА! удалили key
|
||
+<Item>
|
||
|
||
❌ НЕСООТВЕТСТВИЕ ОПИСАНИЮ PR:
|
||
Описание PR: "Добавление функционала редактирования аватара"
|
||
Код: меняет Content-Type на 'shmapplication/json' // ОШИБКА! не связано с аватарами
|
||
|
||
ОБЯЗАТЕЛЬНО ПРОВЕРЬ:
|
||
1. СООТВЕТСТВИЕ ОПИСАНИЮ PR - делает ли код то что написано в описании?
|
||
2. Все строки в кавычках - нет ли опечаток?
|
||
3. Все скобки - все ли закрыты?
|
||
4. Все JSX элементы - правильно ли?
|
||
5. React key - на правильном элементе?
|
||
|
||
{format_instructions}
|
||
|
||
ВАЖНО:
|
||
1. ТОЛЬКО JSON в ответе!
|
||
2. НЕ ПИШИ "Thank you" или другой текст
|
||
3. Даже мелкая опечатка - это ERROR!
|
||
4. Если проблем НЕТ: {{"comments": []}}
|
||
|
||
Структура ответа:
|
||
{{
|
||
"comments": [
|
||
{{
|
||
"line": 58,
|
||
"severity": "ERROR",
|
||
"message": "Опечатка в строке: 'shmapplication/json' должно быть 'application/json'"
|
||
}}
|
||
]
|
||
}}"""
|
||
|
||
|
||
SUMMARY_PROMPT = """На основе всех найденных проблем в PR создай краткое резюме ревью.
|
||
|
||
Найденные проблемы:
|
||
{issues_summary}
|
||
|
||
Создай краткое резюме (2-3 предложения), которое:
|
||
- Указывает общее количество найденных проблем по уровням серьезности
|
||
- Выделяет наиболее критичные моменты
|
||
- Дает общую оценку качества кода
|
||
|
||
Ответ верни в виде текста без форматирования."""
|
||
|