Улучшите свой стиль написания кода на Python с Ruff

Поднимите свой стиль написания кода на Python с помощью Ruff

Что такое Ruff

Ruff – это чрезвычайно быстрый Python-линтер и форматтер, написанный на Rust, который стремится заменить и улучшить существующие инструменты, такие как Flake8, Black и isort. Он обеспечивает 10-100 раз более быструю производительность при сохранении согласованности через более чем 700 встроенных правил и реализацию популярных плагинов.

Ruff поддерживает современный Python совместимость с версией 3.12 и `pyproject.toml`. Он также предлагает поддержку автоматического исправления, кэширование и интеграцию с редактором. Ruff дружественен к монорепозиториям и используется в крупных проектах с открытым исходным кодом, таких как Pandas, FastAPI и других. Объединяя скорость, функциональность и удобство использования, Ruff интегрирует проверку кода, форматирование и автоматическое исправление в единый инструмент, который на несколько порядков быстрее существующих вариантов.

Начало работы с Ruff

Мы легко можем установить `ruff`, используя PIP.

pip install ruff

Чтобы проверить, насколько просто и быстро работает Ruff, мы можем использовать репозиторий DagHub kingabzpro/Yoga-Pose-Classification. Вы можете клонировать его или использовать свой собственный проект для форматирования.

Первым делом мы запустим линтер над нашим проектом. Вы также можете запустить линтер для отдельного файла, заменив “.” на расположение файла.

ruff check .

Ruff выявил 9 ошибок и 1 ошибку, которую можно исправить. Чтобы исправить ошибку, мы будем использовать флаг –fix.

ruff check --fix .

Как видите, он исправил 1 исправимую ошибку. Чтобы отформатировать проект, мы будем использовать команду `ruff format`.

$ ruff format .>>> 3 файлов отформатировано

Линтер и форматтер Ruff внесли множество изменений в код. Но зачем нам нужны эти инструменты? Ответ прост – они полезны для соблюдения стандартов и соглашений по кодированию. Таким образом, вы и ваша команда можете сосредоточиться на важных аспектах вашего кода. Более того, они помогают улучшить качество, поддерживаемость и безопасность нашего кода.

Синтаксическая и форматирование Jupyter Notebooks

Чтобы использовать Ruff для Jupyter Notebook в проекте, вам нужно создать файл `ruff.toml` и добавить следующий код:

extend-include = ["*.ipynb"]

Вы также можете сделать то же самое с файлом `pyproject.toml`.

После этого повторно выполните команды, чтобы увидеть, что они вносят изменения в файлы Jupyter notebook.

2 файла были отформатированы и у нас есть 2 файлы Notebook.

$ ruff format .>>> 2 файлов отформатировано, 3 файла осталось неизменными

Мы также исправили проблемы в этих файлах, запустив команду `check` снова.

$ ruff check --fix .>>> Найдено 51 ошибок (6 исправлено, осталось 45).

Конечный результат потрясающий. Он внес все необходимые изменения, не нарушив код.

Ruff Конфигурации

Настроить Ruff для Jupyter Notebooks легко, отредактировав файл `ruff.toml`, чтобы изменить настройки линтера и форматтера. Подробнее ознакомьтесь с документацией по настройке Ruff.

target-version = "py311"extend-include = ["*.ipynb"]line-length = 80[lint]extend-select = [  "UP",  # pyupgrade  "D",   # pydocstyle][lint.pydocstyle]convention = "google"

GitHub Action & Pre-commit Hook

Разработчики и команды могут использовать Ruff в качестве pre-commit хука через `ruff-pre-commit`:

- repo: https://github.com/astral-sh/ruff-pre-commit  # Ruff version.  rev: v0.1.5  hooks:    # Запуск линтера.    - id: ruff      args: [ --fix ]    # Запуск форматтера.    - id: ruff-format

Также его можно использовать в качестве GitHub Action через `ruff-action`:

name: Ruffon: [ push, pull_request ]jobs:  ruff:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v3      - uses: chartboost/ruff-action@v1

Расширение Ruff для VSCode

Самым приятным аспектом Ruff является его расширение для VSCode. Оно упрощает форматирование и линтинг, устраняя необходимость в сторонних расширениях. Просто найдите Ruff на торговой площадке расширений, чтобы установить его.

Изображение с Ruff – Visual Studio Marketplace

Я настроил `setting.json` для автоматического форматирования при сохранении.

Заключение

Ruff обеспечивает быстрый линтинг и форматирование для более чистого и последовательного кода на Python. Благодаря более чем 700 встроенным правилам, реализованным на Rust для повышения производительности, Ruff черпает вдохновение из популярных инструментов, таких как Flake8, isort и pyupgrade, чтобы обеспечить всеобъемлющий набор лучших практик программирования. Составленный набор правил сосредоточен на выявлении ошибок и критических проблем стиля без чрезмерной придирчивости.

Совместимость с pre-commit хуками, GitHub Actions и редакторами, такими как VSCode, делает интеграцию Ruff в современные рабочие процессы на Python легкой. Благодаря невероятной скорости и тщательно разработанному набору правил, Ruff становится неотъемлемым инструментом для разработчиков Python, которые ценят быструю обратную связь, чистый код и плавное сотрудничество команды. Ruff устанавливает новый стандарт для линтинга и форматирования на Python, объединяя надежный функционал с быстрой производительностью.

****[Абид Али Аван](https://www.polywork.com/kingabzpro)**** (@1abidaliawan) – сертифицированный специалист по науке о данных, который обожает создавать модели машинного обучения. В настоящее время он фокусируется на создании контента и написании технических блогов о машинном обучении и технологиях обработки данных. Абид обладает степенью магистра в менеджменте технологий и степенью бакалавра в области телекоммуникационной инженерии. Его цель – создать продукт искусственного интеллекта, использующий графовую нейронную сеть, для студентов, борющихся с психическими заболеваниями.