0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>У кода есть множество разных характеристик, по которым можно судить, насколько хорошо он написан. Среди них есть одна базовая, с которой начинают все разработчики - это стиль написания.</p>
1
<p>У кода есть множество разных характеристик, по которым можно судить, насколько хорошо он написан. Среди них есть одна базовая, с которой начинают все разработчики - это стиль написания.</p>
2
<p>Сравните два варианта оформления кода:</p>
2
<p>Сравните два варианта оформления кода:</p>
3
<p>Второй вариант читается значительно проще. Чем больше будет кода, тем больше будет различий. Хороший стиль кодирования - базовое требование к коду в коммерческой разработке, потому что он упрощает командную разработку. В одном проекте может работать несколько десятков программистов. Важно, чтобы им было легко читать код друг друга, не спотыкаясь о неправильное форматирование.</p>
3
<p>Второй вариант читается значительно проще. Чем больше будет кода, тем больше будет различий. Хороший стиль кодирования - базовое требование к коду в коммерческой разработке, потому что он упрощает командную разработку. В одном проекте может работать несколько десятков программистов. Важно, чтобы им было легко читать код друг друга, не спотыкаясь о неправильное форматирование.</p>
4
<p>Для отслеживания подобных ситуаций существуют<strong>линтеры</strong>- особый класс программ. Линтеры содержат большое количество правил, по которым они могут выдать рекомендации по коду. Другими словами, они подсказывают, как стоит писать код, а как - не стоит. Более того, часто линтеры расширяются плагинами под конкретные фреймворки, что позволяет отслеживать специфичные ошибки и давать рекомендации по кодированию в этих фреймворках.</p>
4
<p>Для отслеживания подобных ситуаций существуют<strong>линтеры</strong>- особый класс программ. Линтеры содержат большое количество правил, по которым они могут выдать рекомендации по коду. Другими словами, они подсказывают, как стоит писать код, а как - не стоит. Более того, часто линтеры расширяются плагинами под конкретные фреймворки, что позволяет отслеживать специфичные ошибки и давать рекомендации по кодированию в этих фреймворках.</p>
5
<p>В Python в последнее время особой популярностью пользуется линтер<a>ruff</a>. Количество правил, по которым он проверяет код, исчисляется<a>десятками</a>. Посмотрите на этот небольшой участок кода:</p>
5
<p>В Python в последнее время особой популярностью пользуется линтер<a>ruff</a>. Количество правил, по которым он проверяет код, исчисляется<a>десятками</a>. Посмотрите на этот небольшой участок кода:</p>
6
<p>С точки зрения форматирования здесь все хорошо, а что скажет линтер?</p>
6
<p>С точки зрения форматирования здесь все хорошо, а что скажет линтер?</p>
7
<ul><li>F401 'math.sqrt' imported but<a>unused</a>. Модуль импортируется, но не используется - либо он не нужен, либо в коде есть ошибка</li>
7
<ul><li>F401 'math.sqrt' imported but<a>unused</a>. Модуль импортируется, но не используется - либо он не нужен, либо в коде есть ошибка</li>
8
<li>F841 local variable 'c' is assigned to but never<a>used</a>. Переменная не используется - либо она не нужна, либо в коде ошибка</li>
8
<li>F841 local variable 'c' is assigned to but never<a>used</a>. Переменная не используется - либо она не нужна, либо в коде ошибка</li>
9
</ul><p>Ссылки выше ведут на страницы конкретных правил. Там подробно объясняется, почему так код писать не нужно. Изучать правила линтеров очень полезно, они прививают хорошие практики написания кода.</p>
9
</ul><p>Ссылки выше ведут на страницы конкретных правил. Там подробно объясняется, почему так код писать не нужно. Изучать правила линтеров очень полезно, они прививают хорошие практики написания кода.</p>
10
<h2>Установка и настройка ruff</h2>
10
<h2>Установка и настройка ruff</h2>
11
<p>Линтер ruff устанавливается как<em>dev</em>зависимость прямо в проект:</p>
11
<p>Линтер ruff устанавливается как<em>dev</em>зависимость прямо в проект:</p>
12
<p>После установки его можно настроить под набор ваших правил и ограничений. Для этого нужно создать файл конфигурации<em>ruff.toml</em>, который нужно добавить в репозиторий. Ниже пример такого файла, который используется для настройки линтера в наших практиках:</p>
12
<p>После установки его можно настроить под набор ваших правил и ограничений. Для этого нужно создать файл конфигурации<em>ruff.toml</em>, который нужно добавить в репозиторий. Ниже пример такого файла, который используется для настройки линтера в наших практиках:</p>
13
<p>Выше настраивается максимальная длина строчки кода, какие файлы не нужно проверять линтером или какие правила можно игнорировать. Также в поле select перечисляются группы, используемых правил.</p>
13
<p>Выше настраивается максимальная длина строчки кода, какие файлы не нужно проверять линтером или какие правила можно игнорировать. Также в поле select перечисляются группы, используемых правил.</p>
14
<p>Наборы правил, которыми пользуются линтеры, называют стилевым стандартом или стайлгайдом. В Python самый первый стайлгайд был описан в документе<a>PEP8</a>. С тех пор язык сильно вырос, стал использоваться в продакшене и приобрел множество новых фич. Потому появилось много расширений правил PEP8, добавляющих новые проверки. Современные линтеры используют наборы разных групп правил. Наиболее частые это "E", "F", "I" и "C90". Вы можете почитать какие проверки они добавляют на<a>странице правил</a>.</p>
14
<p>Наборы правил, которыми пользуются линтеры, называют стилевым стандартом или стайлгайдом. В Python самый первый стайлгайд был описан в документе<a>PEP8</a>. С тех пор язык сильно вырос, стал использоваться в продакшене и приобрел множество новых фич. Потому появилось много расширений правил PEP8, добавляющих новые проверки. Современные линтеры используют наборы разных групп правил. Наиболее частые это "E", "F", "I" и "C90". Вы можете почитать какие проверки они добавляют на<a>странице правил</a>.</p>
15
<p>Наконец, последний шаг - запуск ruff:</p>
15
<p>Наконец, последний шаг - запуск ruff:</p>
16
<p>Если ошибок нет, то ruff молча завершит свою работу. Если ошибки есть, линтер выведет список с указанием того, что нужно поправить.</p>
16
<p>Если ошибок нет, то ruff молча завершит свою работу. Если ошибки есть, линтер выведет список с указанием того, что нужно поправить.</p>
17
<p>Кроме нахождения ошибок ruff может их исправлять. По крайней мере те ошибки, которые могут быть исправлены с гарантией сохранения работоспособности. Для этого нужно добавить флаг --fix в запуск:</p>
17
<p>Кроме нахождения ошибок ruff может их исправлять. По крайней мере те ошибки, которые могут быть исправлены с гарантией сохранения работоспособности. Для этого нужно добавить флаг --fix в запуск:</p>
18
18