ai-code-review
Описание
Let's test code reviews by AI!
Языки
- Python78,7%
- Makefile21,3%
AI Code Review
Данный проект создан, чтобы понять, какие ошибки может найти AI ревью кода.
Список проблем, которые я добавил в проект:
- Небезопасный Python код: subprocess.run([user_input, ...])
- Плохое имя переменной: moy_lubimiy_film = '{"album_id": 1, "next_song": 2}'
- Сложный Python код в функции complex_code
- Затирание встроенного в Python имени: input
- Использование
без явной причины:Anyinput: Any - Неправильная аннотация типа данных: x: int = 'a'
- Логическая ошибка: if subvalue in seen
- Использование несуществующей переменной: missing_var
- Плохо отформатированный Python код: my_unformatted_list
- Некорректный порядок импортов: from typing import Any
- Небезопасная и устаревшая зависимость
вdjango@1.9pyproject.toml
ИИ проверка
Документация:
- https://gitverse.ru/docs/ai-agents/gigacode-agent
- https://gitverse.ru/docs/collaborative-work/code-review/#%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA%D0%B8-ai-%D0%BE%D0%B1%D0%B7%D0%BE%D1%80%D0%B0
Для тестирования ИИ ревью я выбрал два способа:
- С большим количеством контекста. Я сначала создал данный файл (кроме части про ИИ проверку), положил его в репозиторий, отправил PR с изменениями, запросил ревью. В реальном проекте роль такого контекста могут играть файлы документации и комментарии в коде. Ссылка: https://gitverse.ru/sobolevn/ai-code-review/pulls/1
- С маленьким количеством контекста.
Я сделал
безpush -f, создал коммит и сделал PR. Ссылка: https://gitverse.ru/sobolevn/ai-code-review/pulls/2README.md
В случае наличия дополнительного контекста, ревью ИИ было сделано несколько лучше. Легенда:
- ❌ = ошибка не найдена
- ✅ = ошибка найдена
- 🤔 = ошибка найдена с дополнительным контекстом
Результаты:
- Небезопасный Python код:
✅subprocess.run([user_input, ...]) - Плохое имя переменной:
🤔moy_lubimiy_film = '{"album_id": 1, "next_song": 2}' - Сложный Python код в функции
❌complex_code - Затирание встроенного в Python имени:
❌input - Использование
без явной причины:Any❌input: Any - Неправильная аннотация типа данных:
✅x: int = 'a' - Логическая ошибка:
🤔if subvalue in seen - Использование несуществующей переменной:
✅missing_var - Плохо отформатированный Python код:
🤔my_unformatted_list - Некорректный порядок импортов:
❌from typing import Any - Небезопасная и устаревшая зависимость
вdjango@1.9❌pyproject.toml
Тестирование поиска проблемы с именем переменной
лежит здесь: https://gitverse.ru/sobolevn/ai-code-review/pulls/4
Потребовалось явно задать контекст для поиска ошибки.
Отдельно отмечу, что пока полагаться на предложенные варианты исправлений – плохая идея. Код там не исправляет ошибки, а добавляет новые :)
Бонус: данный сам был проревьюен ИИ,
была найдена 1 настоящая ошибка: https://gitverse.ru/sobolevn/ai-code-review/pulls/3
Классическая проверка
Посмотреть полный вывод всех инструментов: https://gitverse.ru/sobolevn/ai-code-review/cicd/13?job=0
Для классической проверки мы будем использовать:
Что не получилось найти?
- Плохое имя переменной:
❌moy_lubimiy_film = '{"album_id": 1, "next_song": 2}'
Посмотрим, как получилось поймать другие ошибки.
mypy
- Неправильная аннотация типа данных:
✅x: int = 'a'
- Логическая ошибка:
✅if subvalue in seen
- Использование несуществующей переменной:
✅missing_var
wemake-python-styleguide
- Сложный Python код в функции
✅complex_code
ruff
- Некорректный порядок импортов:
✅from typing import Any
- Плохо отформатированный Python код:
✅my_unformatted_list
Уточнение: выдаст такое исправление:
- Сложный Python код в функции
✅complex_code
- Затирание встроенного в Python имени:
✅input
- Использование
без явной причины:Any✅input: Any
- Небезопасный Python код:
✅subprocess.run([user_input, ...])
- Использование несуществующей переменной:
✅missing_var
safety
- Небезопасная и устаревшая зависимость
вdjango@1.9✅pyproject.toml
Using open-source vulnerability database
Found and scanned 69 packages
Timestamp 2025-08-05 12:35:37
45 vulnerabilities reported
0 vulnerabilities ignored
+=========================================================================================+
VULNERABILITIES REPORTED
+=========================================================================================+
-> Vulnerability found in django version 1.9.13
Vulnerability ID: 48041
Affected spec: <2.2.28
ADVISORY: Django 2.2.28, 3.2.13 and 4.0.4 include a fix for CVE-2022-28346:
An issue was discovered in Django 2.2 before 2.2.28, 3.2 before 3.2.13, and 4.0...
CVE-2022-28346
For more information about this vulnerability, visit
https://data.safetycli.com/v/48041/97c
To ignore this vulnerability, use PyUp vulnerability id 48041 in safety’s ignore
command-line argument or add the ignore to your safety policy file.
...
Вывод
Пользоваться ИИ для ревью кода – выглядит довольно перспективной идеей. Сейчас уже есть неплохие результаты. Такая проверка явно помогает человеку, особенно, если других инструментов в CI нет. Или их мало.
Однако, лучше всего использовать комбинацию инструментов анализа кода и ИИ. Тогда шансы найти ошибки – максимальные.
А тут ашибка для теста, найдет ли её ИИ при ревью :)