Посмотрел на свои килостроки и понял: если делать красоту вручную, уйдёт столько же времени, сколько на разработку.
Полез гуглить.
И, внезапно, под Python нормальных линтеров оказалось не так много (в сравнении с JS).
Да есть pylint, но у меня с ним не сложилось(
В общем выбор пал на Ruff и это просто 🚀.
Он не только приводит код в порядок, но и подсказывает, где я накосячил.
Разобрался как эта штука работает.
Что делает Ruff (по-нашему, по-простому)
- Парсит код в AST, а не «ищет по строкам» понимает контекст.
- Прогоняет правила: от реальных ошибок до стиля.
- Авточинит всё, что можно (--fix).
- Отдельной командой ровняет стиль (ruff format): кавычки, переносы, пустые строки и т.д.
- Очень быстрый и ставится одним бинарником.
- Настройки лежат в одном pyproject.toml.
Как стартануть за 2 минуты
Установка:
pip install ruff
# или uv/pipx/poetry — как удобнее
Ежедневные команды:
# 1) автофиксы линтера (включая сортировку импортов)
ruff check . --fix
# 2) единый стиль по всему проекту
ruff format .
Проверка в CI (ничего не трогаем, только валидируем):
ruff format --check .
ruff check . --output-format=github
Минимальный pyproject.toml:
[tool.ruff]
line-length = 100
target-version = "py311"
[tool.ruff.lint]
# Базовые ошибки, импорты и апгрейд синтаксиса
select = ["E", "F", "I", "UP"]
ignore = ["E501"] # длину строки отдаём на откуп форматтеру
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
Важный порядок: сначала ruff check --fix (в т.ч. сортировка импортов), потом ruff format.
Итог: код ровный, читаемый, импорты на месте.
Штука стоящая, да ещё и супер быстрая в сравнении с другими линтерами.
Make code great again 👨💻
