Найти и предотвратить ошибки в JavaScript: как быстро научиться работать с ESLint
Поскольку JavaScript — это интерпретируемый язык, ошибки, допущенные в коде, выявляются во время его выполнения. Чтобы увидеть ошибки до запуска кода, используется инструмент, который называется линтер. Для поиска ошибок применяется статический анализ и используются особые правила.
Что такое ESLint
ESLint — это инструмент для поиска и исправления ошибок в коде JavaScript и ECMAScript. Он находит синтаксические ошибки, проблемы в шаблонах проектирования и отклонения от стиля. Наряду с большим количеством встроенных правил в нем можно использовать собственные правила или готовые плагины с правилами. Благодаря модульной структуре и множеству возможностей настройки можно настроить ESLint именно так, как нужно для вашего проекта.
Как работать с ESLint: шаг за шагом
Перед установкой ESLint нужно установить Node.js с поддержкой SSL и npm. Предположим, что вы уже сделали это заранее.
Для начала создайте каталог для проекта и поместите в него файл index.js
с таким содержимым:
let i = 0; do { alert( i ); i++; } while (true);
Затем инициализируйте npm в этом каталоге, если еще этого не сделали:
npm init
В результате будет создан файл package.json
с параметрами пакета.
Установите ESLint в каталоге проекта. Для этого запустите в терминале следующую команду:
npm install eslint --save-dev
ESLint будет установлен локально. Существует возможность глобальной установки (с помощью команды npm install eslint --global
), но не рекомендуем использовать такой подход. Все модули и совместно используемые файлы конфигурации в любом случае следует устанавливать локально.
Для настройки файла конфигурации выполните следующую команду:
npx eslint --init
Во время выполнения этой команды вам понадобится ответить на несколько вопросов. Предположим, что нам нужно проверять синтаксис, находить проблемы и применять стиль кодирования:
Укажем, что будут использованы модули JavaScript:
В примере мы не используем ни React, ни Vue.js, ни TypeScript:
Предположим, код будет выполняться в браузере:
Укажем, что будем применять инструкции по стилю и выберем Airbnb:
Пусть файл конфигурации будет создан в формате JSON:
Установим зависимости:
В результате в каталоге проекта будет создан файл .eslintrc.json
(или с другим расширением — в зависимости от выбранного вами формата).
В нем будет находиться примерно такой код:
module.exports = { 'env': { 'browser': true, 'es2021': true }, 'extends': 'eslint:recommended', 'parserOptions': { 'ecmaVersion': 12, 'sourceType': 'module' }, 'rules': { } };
Проверяем проект
Теперь можно проверить проект, вызвав линтер для какого-либо файла или каталога. Вызовем eslint
, передав в качестве аргумента текущий каталог (обозначенный точкой): node_modules\.bin\eslint .
В результате получим:
Мы видим четыре ошибки и два предупреждения с указанием их позиций в файле. Также в таблице приведены описания и указаны нарушенные правила.
В сообщении указано, что три ошибки можно исправить, указав опцию --fix
. Давайте так и сделаем: введем ту же команду и укажем эту опцию:
node_modules\.bin\eslint . --fix
Вывод будет таким:
Видим, что линтер сам справился с тремя ошибками, а нам оставил остальные. Код в файле изменен:
let i = 0; do { alert(i); i++; } while (true);
Обратите внимание: вставлен символ новой строки и убраны пробелы в скобках.
Rules: правила проверки кода
В конфигурации примера выше мы использовали имеющиеся правила проверки. Но можно добавить и свои правила. В файле .eslintrc.json
есть раздел rules.
Если при создании проекта указать не имеющийся набор инструкций, а задать свои правила (выбрав пункт Answer questins about your style), то в разделе правил в файле .eslintrc.json
можно будет увидеть примерно такие правила:
'rules': { 'indent': [ 'error', 4 ], 'linebreak-style': [ 'error', 'unix' ], 'quotes': [ 'error', 'single' ], 'semi': [ 'error', 'always' ] }
Структура правила проста. Рассмотрим первое правило из приведенного выше примера.
Слово indent
— это имя правила. Первый элемент в списке обозначает уровень ошибки и может принимать следующие значения:
off
или 0 — выключить правило;warn
или 1 — включить правило как предупреждение (не влияет на код выхода);error
или 2 — включить правило как ошибку (с кодом выхода 1).
Второй элемент в этом случае означает количество пробелов. Второй аргумент зависит от правила.
Итак, приведенные выше правила указывают, что следует использовать отступ в четыре пробела, завершение строк в стиле UNIX, одинарные кавычки и не пропускать точку с запятой.
Правила делятся на несколько категорий. Существуют правила проверки на наличие возможных синтаксических и логических ошибок в коде:
getter-return
(обязательное применение оператора возврата в методах чтения);-
no-setter-return
(запрет применения оператора возврата в методах изменения значения); -
no-dupe-args
(запрет дублирующихся аргументов в определениях функций).
Есть правила проверки соблюдения передовой практики, например, accessor-pairs
(обязательное применение пар методов чтения и изменения значений в объектах и классах).
Правила относительно переменных (no-unused-vars
— запрет на неиспользуемые переменные), стилистические правила (eol-last
— разрешение или запрет символа новой строки в конце файла) и правила для ECMAScript 6.
Вернемся к коду, немного изменим файл index.js
и отправим его на проверку:
let i = 0 do { alert("Loop " + i); i++; } while (true);
Будут выданы такие сообщения об ошибках:
Здесь сообщается, что пропущена точка с запятой, используется отступ в два пробела вместо четырех и двойные кавычки вместо одинарных, а в цикле использовано константное условие.
Полный список правил ESLint можно просмотреть по этой ссылке.
Чтобы не вводить одни и те же команды каждый раз, можно в разделе scripts
в файле package.json
указать сценарий для запуска eslint
. Он может выглядеть так:
"scripts": { "lint": "eslint . --fix" },
Вывод будет примерно таким:
Эти сообщения об ошибках можно проигнорировать.
Проверку можно отключать как для отдельных строк, так и для нескольких.
Для отключения отдельной строки ее нужно завершить комментарием:
// eslint-disable-line
Чтобы отключить проверку для нескольких строк, перед ними следует вставить комментарий /* eslint-disable */
, а после — /* eslint-enable */
:
let i = 0; do { alert('Loop ' + i); i++; /* eslint-disable */ } while (true); /* eslint-enable */
Также можно отключить одно или несколько конкретных правил. Для этого в комментарии /* eslint-disable */
их перечисляют через запятую:
/* eslint-disable semi, quotes */
Заключение
ESLint — эффективный инструмент, который можно настраивать и расширять в соответствии с потребностями разных проектов.
ESLint продолжает активно развиваться и интегрируется с Sublime Text 3, Vim, Visual Studio Code, IntelliJ IDEA, Emacs, Eclipse и многими другими средами разработки.
Он играет важную роль, поскольку его обширные возможности дают разработчикам возможность сконцентрировать усилия на разработке, а не на поиске ошибок и несоответствий стилю.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: