ai-code-review

0

Описание

Let's test code reviews by AI!

Языки

  • Python78,7%
  • Makefile21,3%
8 месяцев назад
8 месяцев назад
8 месяцев назад
8 месяцев назад
8 месяцев назад
8 месяцев назад
8 месяцев назад
8 месяцев назад
README.md

AI Code Review

Данный проект создан, чтобы понять, какие ошибки может найти AI ревью кода.

Список проблем, которые я добавил в проект:

  • Небезопасный 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

ИИ проверка

Документация:

Для тестирования ИИ ревью я выбрал два способа:

  1. С большим количеством контекста. Я сначала создал данный файл (кроме части про ИИ проверку), положил его в репозиторий, отправил PR с изменениями, запросил ревью. В реальном проекте роль такого контекста могут играть файлы документации и комментарии в коде. Ссылка: https://gitverse.ru/sobolevn/ai-code-review/pulls/1
  2. С маленьким количеством контекста. Я сделал
    push -f
    без
    README.md
    , создал коммит и сделал PR. Ссылка: https://gitverse.ru/sobolevn/ai-code-review/pulls/2

В случае наличия дополнительного контекста, ревью ИИ было сделано несколько лучше. Легенда:

  • ❌ = ошибка не найдена
  • ✅ = ошибка найдена
  • 🤔 = ошибка найдена с дополнительным контекстом

Результаты:

  • Небезопасный 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

Тестирование поиска проблемы с именем переменной

moy_lubimiy_film
лежит здесь: https://gitverse.ru/sobolevn/ai-code-review/pulls/4 Потребовалось явно задать контекст для поиска ошибки.

Отдельно отмечу, что пока полагаться на предложенные варианты исправлений – плохая идея. Код там не исправляет ошибки, а добавляет новые :)

Бонус: данный

README.md
сам был проревьюен ИИ, была найдена 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

Уточнение:

ruff format
выдаст такое исправление:

  • Сложный 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 нет. Или их мало.

Однако, лучше всего использовать комбинацию инструментов анализа кода и ИИ. Тогда шансы найти ошибки – максимальные.

А тут ашибка для теста, найдет ли её ИИ при ревью :)