Python: Настройка окружения
Теория: Линтинг
У кода есть множество разных характеристик, по которым можно судить, насколько хорошо он написан. Среди них есть одна базовая, с которой начинают все разработчики — это стиль написания.
Сравните два варианта оформления кода:
Второй вариант читается значительно проще. Чем больше будет кода, тем больше будет различий. Хороший стиль кодирования — базовое требование к коду в коммерческой разработке, потому что он упрощает командную разработку. В одном проекте может работать несколько десятков программистов. Важно, чтобы им было легко читать код друг друга, не спотыкаясь о неправильное форматирование.
Для отслеживания подобных ситуаций существуют линтеры — особый класс программ. Линтеры содержат большое количество правил, по которым они могут выдать рекомендации по коду. Другими словами, они подсказывают, как стоит писать код, а как — не стоит. Более того, часто линтеры расширяются плагинами под конкретные фреймворки, что позволяет отслеживать специфичные ошибки и давать рекомендации по кодированию в этих фреймворках.
В Python в последнее время особой популярностью пользуется линтер ruff. Количество правил, по которым он проверяет код, исчисляется десятками. Посмотрите на этот небольшой участок кода:
С точки зрения форматирования здесь все хорошо, а что скажет линтер?
- F401 'math.sqrt' imported but unused. Модуль импортируется, но не используется — либо он не нужен, либо в коде есть ошибка
- F841 local variable 'c' is assigned to but never used. Переменная не используется — либо она не нужна, либо в коде ошибка
Ссылки выше ведут на страницы конкретных правил. Там подробно объясняется, почему так код писать не нужно. Изучать правила линтеров очень полезно, они прививают хорошие практики написания кода.
Установка и настройка ruff
Линтер ruff устанавливается как dev зависимость прямо в проект:
После установки его можно настроить под набор ваших правил и ограничений. Для этого нужно создать файл конфигурации ruff.toml, который нужно добавить в репозиторий. Ниже пример такого файла, который используется для настройки линтера в наших практиках:
Выше настраивается максимальная длина строчки кода, какие файлы не нужно проверять линтером или какие правила можно игнорировать. Также в поле select перечисляются группы, используемых правил.
Наборы правил, которыми пользуются линтеры, называют стилевым стандартом или стайлгайдом. В Python самый первый стайлгайд был описан в документе PEP8. С тех пор язык сильно вырос, стал использоваться в продакшене и приобрел множество новых фич. Потому появилось много расширений правил PEP8, добавляющих новые проверки. Современные линтеры используют наборы разных групп правил. Наиболее частые это "E", "F", "I" и "C90". Вы можете почитать какие проверки они добавляют на странице правил.
Наконец, последний шаг — запуск ruff:
Если ошибок нет, то ruff молча завершит свою работу. Если ошибки есть, линтер выведет список с указанием того, что нужно поправить.
Кроме нахождения ошибок ruff может их исправлять. По крайней мере те ошибки, которые могут быть исправлены с гарантией сохранения работоспособности. Для этого нужно добавить флаг --fix в запуск:



