Найти и предотвратить ошибки в 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 и многими другими средами разработки.
Он играет важную роль, поскольку его обширные возможности дают разработчикам возможность сконцентрировать усилия на разработке, а не на поиске ошибок и несоответствий стилю.












Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: