HTML Diff
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>Универсальным решением этой задачи сейчас стала утилита<em>prettier</em>, которая берет весь код в файле и полностью переформатирует его так как нужно в соответствии со своими правилами. Однако этого недостаточно и можно пойти гораздо дальше. Prettier форматирует код, но не вникает в его семантику (назначение). Например, в JavaScript хорошим тоном считается использовать === вместо ==. Так значительно безопаснее и так мы защищаемся от случайных ошибок преобразований типов. Prettier не может автоматически заменять == на === потому что это может сломать код.</p>
3 <p>Универсальным решением этой задачи сейчас стала утилита<em>prettier</em>, которая берет весь код в файле и полностью переформатирует его так как нужно в соответствии со своими правилами. Однако этого недостаточно и можно пойти гораздо дальше. Prettier форматирует код, но не вникает в его семантику (назначение). Например, в JavaScript хорошим тоном считается использовать === вместо ==. Так значительно безопаснее и так мы защищаемся от случайных ошибок преобразований типов. Prettier не может автоматически заменять == на === потому что это может сломать код.</p>
4 <p>Для отслеживания подобных ситуаций существует класс программ, называемых линтерами. Линтеры содержат большое количество правил, которые могут выдать рекомендации как стоит писать код, а как не стоит. Более того, часто линтеры расширяются плагинами под конкретные фреймворки, что позволяет отслеживать специфичные ошибки и давать рекомендации по тому, как писать код в этих фреймворках.</p>
4 <p>Для отслеживания подобных ситуаций существует класс программ, называемых линтерами. Линтеры содержат большое количество правил, которые могут выдать рекомендации как стоит писать код, а как не стоит. Более того, часто линтеры расширяются плагинами под конкретные фреймворки, что позволяет отслеживать специфичные ошибки и давать рекомендации по тому, как писать код в этих фреймворках.</p>
5 <p>В JavaScript-мире особой популярностью пользуется линтер<a>eslint</a>. Количество правил, по которым он проверяет код, исчисляется<a>сотнями</a>. Посмотрите на этот небольшой участок кода:</p>
5 <p>В JavaScript-мире особой популярностью пользуется линтер<a>eslint</a>. Количество правил, по которым он проверяет код, исчисляется<a>сотнями</a>. Посмотрите на этот небольшой участок кода:</p>
6 <p>С точки зрения форматирования здесь все хорошо, а что скажет линтер? Eslint выдаст три предупреждения:</p>
6 <p>С точки зрения форматирования здесь все хорошо, а что скажет линтер? Eslint выдаст три предупреждения:</p>
7 <ul><li>Identifier name 'a' is too short<a>id-length</a>. Слишком короткое имя.</li>
7 <ul><li>Identifier name 'a' is too short<a>id-length</a>. Слишком короткое имя.</li>
8 <li>Unary operator '++' used<a>no-plusplus</a>. Используется инкремент, что опасно.</li>
8 <li>Unary operator '++' used<a>no-plusplus</a>. Используется инкремент, что опасно.</li>
9 <li>'a' is assigned a value but never used<a>no-unused-vars</a>. Переменная не используется, а значит она либо не нужна, либо в коде ошибка.</li>
9 <li>'a' is assigned a value but never used<a>no-unused-vars</a>. Переменная не используется, а значит она либо не нужна, либо в коде ошибка.</li>
10 </ul><p>Ссылки выше ведут на страницы конкретных правил, где подробно объясняется, почему так код писать не нужно и как его писать нужно. Изучать правила<em>eslint</em>очень полезно, они прививают хорошие практики написания кода.</p>
10 </ul><p>Ссылки выше ведут на страницы конкретных правил, где подробно объясняется, почему так код писать не нужно и как его писать нужно. Изучать правила<em>eslint</em>очень полезно, они прививают хорошие практики написания кода.</p>
11 <h2>Установка и настройка Eslint</h2>
11 <h2>Установка и настройка Eslint</h2>
12 <p>Eslint устанавливается как<em>dev</em>зависимость прямо в проект:</p>
12 <p>Eslint устанавливается как<em>dev</em>зависимость прямо в проект:</p>
13 <p>После установки его надо настроить, иначе он не будет выполнять проверки. Для этого нужно запустить команду инициализации, которая использует дополнительный пакет<em>@eslint/create-config</em>. Во время настройки<em>eslint</em>задаст много разных вопросов. Мы установили определенные версии пакетов, при которых настройка будет выглядеть так, как показана ниже. Если вы установите другие версии пакетов, то варианты ответов могут отличаться. Но вы всегда можете отредактировать файл настройки вручную.</p>
13 <p>После установки его надо настроить, иначе он не будет выполнять проверки. Для этого нужно запустить команду инициализации, которая использует дополнительный пакет<em>@eslint/create-config</em>. Во время настройки<em>eslint</em>задаст много разных вопросов. Мы установили определенные версии пакетов, при которых настройка будет выглядеть так, как показана ниже. Если вы установите другие версии пакетов, то варианты ответов могут отличаться. Но вы всегда можете отредактировать файл настройки вручную.</p>
14 <p>npx eslint --init ✔ What do you want to lint? · javascript ✔ How would you like to use ESLint? · problems ✔ What type of modules does your project use? · esm ✔ Which framework does your project use? · none ✔ Does your project use TypeScript? · no ✔ Where does your code run? · node The config that you've selected requires the following dependencies: eslint, @eslint/js, globals ✔ Would you like to install them now? · Yes ✔ Which package manager do you want to use? · npm ☕️Installing...</p>
14 <p>npx eslint --init ✔ What do you want to lint? · javascript ✔ How would you like to use ESLint? · problems ✔ What type of modules does your project use? · esm ✔ Which framework does your project use? · none ✔ Does your project use TypeScript? · no ✔ Where does your code run? · node The config that you've selected requires the following dependencies: eslint, @eslint/js, globals ✔ Would you like to install them now? · Yes ✔ Which package manager do you want to use? · npm ☕️Installing...</p>
15 <p><em>Выбор пунктов Browser/Node выполняется по клавише пробела, а подтверждение по Enter</em></p>
15 <p><em>Выбор пунктов Browser/Node выполняется по клавише пробела, а подтверждение по Enter</em></p>
16 <p>В результате настройки<em>eslint</em>создаст файл, который нужно добавить в репозиторий:</p>
16 <p>В результате настройки<em>eslint</em>создаст файл, который нужно добавить в репозиторий:</p>
17 <p>Сам по себе<em>eslint</em>не использует какие-то стилистические правила. Чтобы это исправить нужно добавить стили кодирования. Мы будем использовать<a>ESLint Stylistic</a>. В первую очередь нужно установить пакет:</p>
17 <p>Сам по себе<em>eslint</em>не использует какие-то стилистические правила. Чтобы это исправить нужно добавить стили кодирования. Мы будем использовать<a>ESLint Stylistic</a>. В первую очередь нужно установить пакет:</p>
18 <p>После установки нужно добавить правила стилей в файле настроек<em>eslint</em>. Итоговый файл выглядит так:</p>
18 <p>После установки нужно добавить правила стилей в файле настроек<em>eslint</em>. Итоговый файл выглядит так:</p>
19 <p>И последний шаг - запуск<em>eslint</em>:</p>
19 <p>И последний шаг - запуск<em>eslint</em>:</p>
20 <p>Если ошибок нет, то<em>eslint</em>молча завершит свою работу. Если ошибки есть - выведет список с указанием того, что нужно поправить.</p>
20 <p>Если ошибок нет, то<em>eslint</em>молча завершит свою работу. Если ошибки есть - выведет список с указанием того, что нужно поправить.</p>
21 <p>Файл настройки можно изменять, указывать дополнительно различные правила проверки, отключать какие-то правила по необходимости. Правил очень много, их изучение выходит за рамки базового знакомства с линтером, но уже стандартных настроек достаточно для использования. Полностью настроенный конфиг<a>можно взять тут</a>.</p>
21 <p>Файл настройки можно изменять, указывать дополнительно различные правила проверки, отключать какие-то правила по необходимости. Правил очень много, их изучение выходит за рамки базового знакомства с линтером, но уже стандартных настроек достаточно для использования. Полностью настроенный конфиг<a>можно взять тут</a>.</p>
22 <p>Кроме нахождения ошибок<em>eslint</em>может их исправлять. По крайней мере те ошибки, которые могут быть исправлены с гарантией сохранения работоспособности. Для этого нужно добавить флаг --fix в запуск:</p>
22 <p>Кроме нахождения ошибок<em>eslint</em>может их исправлять. По крайней мере те ошибки, которые могут быть исправлены с гарантией сохранения работоспособности. Для этого нужно добавить флаг --fix в запуск:</p>
23  
23