Есть отличный инструмент для линтига python проектов, который по скорости своей работы превосходит любые другие аналоги. Проект называется ruff, поддерживает pyproject.toml, умеет автоматически делать фиксы в коде и многое другое.
Рассмотрим основные моменты его использования.
Как обычно, берем наш тестовый python проект.
Устанавливаем ruff:
pip3 install ruff
Добавляем следующие параметры в pyproject.toml:
[tool.ruff]
exclude = [
".bzr",
".direnv",
".eggs",
".git",
".git-rewrite",
".hg",
".mypy_cache",
".nox",
".pants.d",
".pytype",
".ruff_cache",
".svn",
".tox",
".venv",
"__pypackages__",
"_build",
"buck-out",
"build",
"dist",
"node_modules",
"venv",
]
line-length = 88
indent-width = 4
[tool.ruff.lint]
select = ["E", "W", "C", "F", "N", "D"]
ignore = []
# Allow fix for all enabled rules (when `--fix`) is provided.
fixable = ["ALL"]
unfixable = []
Параметры интуитивно понятны, но самое интересное тут, это select = [«E», «W», «C», «F», «N», «D»].
Дело в том, что ruff дает нам возможность включать линтер по группа правил. Все группы описаны тут. Можно выбирать как все из группы «E», так например и только те правила, которые начинаются к примеру с 4, то есть «Е4».
Давайте сравним скорость работы с pyliint
Почти 1.7 секунды.
Запустим ruff:
ruff check src
Кофигурация для ruff будет автоматически взята из pyproject.toml.
0.015 секунд.
Представьте сколько времени можно сэкономите на линтинге больших проектов.
Давайте проверим, что сможет пофиксить за нас ruff. Я специально добавлю в файл cli.py строку:
import os
Это будет не используемый import и запущу туже команду, но с ключом —fix
ruff check --fix src
Видим вывод об одной исправленной ошибке. Конечно ruff не может написать за нас «docstring» для класса или метода, но убрать не используемый импорт, вполне может. Лишняя строка действительно была автоматически удалена из файла.