Разработка
December 25, 2024

Ruff 🐶🐡

В очередной раз добавляя в проект Flake, isort и Black, я подумал "Эх вот был бы такой инструмент который объединяет в себе все эти линтеры и форматеры, работает в связке с pre-commit, и еще чтобы все настройки были в одном файле". Оказывается такой инструмент есть и называется он Ruff (что в переводе - Ёрш(???) 🤔)

Ruff - это линтер + форматер для Python написанный на Rust. Он объединяет в себе все вышеуказанные инструменты и для его настройки нужен всего 1 файл(ruff.toml или pyproject.toml, кому как удобнее)

Для того, чтобы использовать Ruff достаточно знать 2 команды:

ruff format - запускает форматер 
ruff check - запускает линтер (если запустить с флагом --fix сразу исправит все ошибки)

А вот так его можно запускать в pre-commit:

repos:
  - repo: local
    hooks:
      - id: ruff-check
        name: Ruff Check with Fix
        entry: ruff check --fix
        language: python
        types: [python]
        additional_dependencies: [ruff]
      - id: ruff-format
        name: Ruff Format
        entry: ruff format
        language: python
        types: [python]
        additional_dependencies: [ruff]

Ниже оставил конфигурацию моего ruff.toml, который я использую в каждом проекте:

exclude = [
    ".bzr",
    ".direnv",
    ".eggs",
    ".git",
    ".hg",
    ".mypy_cache",
    ".nox",
    ".pants.d",
    ".ruff_cache",
    ".svn",
    ".tox",
    ".venv",
    "__pypackages__",
    "_build",
    "buck-out",
    "build",
    "dist",
    "node_modules",
    "venv",
    "env.py"
]
target-version = "py312"

[lint]
select = [
    "I",
    "F",
    "E",
    "W",
    "I001",
    "T201"
]

[format]
quote-style = "single"