Какие линтеры используются кроме mypy
Что проверяют
Понимаете ли вы, что mypy проверяет типы и не заменяет линтер, форматтер и сканер безопасности. Следом спрашивают, как вы собрали инструменты в один процесс и почему они не дублируют друг друга.
Как отвечать
Покажите, что знаете классы инструментов и по одному-два представителя в каждом:
- линтер: Ruff как выбор по умолчанию, он заменяет Flake8 с плагинами, isort, pyupgrade и умеет часть правил Pylint. Pylint остаётся там, где нужен глубокий анализ с выводом типов между модулями, ценой скорости и долгой настройки;
- форматтер:
ruff formatили Black. Задача одна, убрать споры о стиле; - другие проверщики типов: pyright быстрее mypy на больших кодовых базах и работает под капотом Pylance в VS Code. Появились и новые проверщики на Rust,
tyиpyrefly, но они моложе и в продакшене к ним относятся осторожнее; - безопасность: Bandit ищет
eval,subprocessсshell=True,pickleна входных данных, захардкоженные пароли. Те же правила есть в Ruff под префиксомS; - мёртвый код: vulture;
- зависимости:
pip-auditсверяет пакеты с базой известных уязвимостей. Это не линтер, но упомянуть его здесь уместно.
Потом опишите связку: всё настроено в pyproject.toml, запускается через pre-commit локально и теми же командами в CI. mypy в режиме strict работает на новом коде и постепенно расширяется на старый через секции [[tool.mypy.overrides]].
Где спотыкаются
Перечисляют инструменты, которые дублируют друг друга: Flake8, isort и Ruff одновременно. Проверки идут дважды, а конфиги расходятся.
Считают, что mypy найдёт то же, что линтер. Он не заметит неиспользуемый импорт или опасный eval, а линтер не заметит, что в функцию передали str вместо int.
Включают Bandit на весь репозиторий и получают сотни срабатываний на assert в тестах (правило B101). Тесты нужно исключить или отключить для них это правило, иначе на отчёт перестают смотреть.