Ruff и Pre-commit: автоматизация проверки кода в Python

Автор: Javohir Abdullayev · · Python

Ruff и Pre-commit: автоматизация проверки кода в Python

Экономия времени разработчика: автоматизация качества кода

Каждый Python-разработчик сталкивается с ошибками форматирования, беспорядком в импортах или пропущенными синтаксическими недочётами при написании кода. Раньше для решения этих задач в проект приходилось устанавливать несколько отдельных инструментов: Black для форматирования, isort для сортировки импортов и Flake8 для поиска ошибок. Однако запуск каждого инструмента по отдельности отнимает время, а на крупных проектах процесс проверки заметно замедляется.

В этой статье мы рассмотрим линтер Ruff, написанный на Rust и работающий в 10–100 раз быстрее традиционных решений, а также систему Pre-commit, которая интегрирует его с Git. Эта связка повысит качество вашего проекта и сэкономит массу времени.

Что такое Ruff и почему он так популярен?

Ruff — это линтер и форматтер кода нового поколения для экосистемы Python. Его главное преимущество — молниеносная скорость. Благодаря возможностям языка Rust он способен проверять десятки тысяч строк кода за доли секунды.

Ruff в одиночку заменяет следующие инструменты:

  • Flake8 и десятки его плагинов
  • Форматтер Black
  • Сортировщик импортов isort
  • Инструмент обновления синтаксиса pyupgrade

Pre-commit: как не допустить ошибок в репозитории

Pre-commit — это менеджер хуков Git, который автоматически запускает заданные проверки каждый раз, когда разработчик выполняет команду git commit. Если в коде есть ошибки или нарушено форматирование, коммит отклоняется, а инструмент самостоятельно исправляет код. Это минимизирует ручной труд и человеческий фактор при поддержании чистоты кодовой базы в команде.

Практическое руководство: настройка Ruff и Pre-commit в проекте

Давайте рассмотрим пошаговую настройку этих инструментов с нуля в новом или уже существующем проекте.

1. Установка необходимых пакетов

Установите пакеты в ваше виртуальное окружение (virtualenv, poetry или pipenv) через терминал:

pip install ruff pre-commit

2. Создание файла .pre-commit-config.yaml

Создайте файл .pre-commit-config.yaml в корневой папке проекта и добавьте следующую конфигурацию:

repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.4.4
    hooks:
      # Проверка ошибок и автоматическое исправление
      - id: ruff
        args: [--fix]
      # Форматирование кода в стиле Black
      - id: ruff-format

3. Добавление настроек Ruff в файл pyproject.toml

Для управления конфигурацией Ruff рекомендуется использовать файл pyproject.toml. Задайте длину строки и правила проверки в соответствии с требованиями вашего проекта:

[tool.ruff]
line-length = 88
target-version = "py311"

[tool.ruff.lint]
select = ["E", "F", "I", "UP"]
ignore = ["E501"]

Здесь E и F отвечают за синтаксические и логические ошибки, I — за порядок импортов (isort), а UP отслеживает современный синтаксис Python (pyupgrade).

4. Активация хуков

После завершения настройки активируйте хуки Git:

pre-commit install

Теперь при каждом коммите изменений Ruff будет молниеносно запускаться, удалять лишние пробелы, сортировать импорты по алфавиту и находить скрытые ошибки.

Единовременная проверка всех файлов

Если вы подключили эти инструменты к существующему проекту, рекомендуется в первый раз проверить и отформатировать все файлы сразу с помощью команды:

pre-commit run --all-files

Заключение и эффективность

Внедрение связки Ruff и Pre-commit позволяет разработчику сосредоточиться на бизнес-логике проекта, а не тратить время на споры о форматировании. Мгновенная обратная связь обеспечивает обнаружение ошибок на самых ранних этапах, что как минимум вдвое повышает продуктивность как во фриланс-проектах, так и в крупных командах.

Теги: #python #pre-commit #ruff #kod sifati #avtomatlashtirish