В процессе работы ESLint анализирует исходный код и сообщает о
нарушениях правил. Однако существуют ситуации, когда определённое
предупреждение или ошибка являются допустимыми по архитектурным,
техническим или организационным причинам. Для временного или постоянного
отключения проверок используются специальные комментарии семейства
eslint-disable.
Комментарии отключения позволяют:
Несмотря на удобство, чрезмерное использование таких комментариев считается плохой практикой, поскольку снижает эффективность статического анализа и может скрывать реальные ошибки.
Для отключения всех проверок на одной строке используется комментарий:
// eslint-disable-next-line
console.log(userData);
После комментария ESLint не будет анализировать следующую строку независимо от количества нарушений.
Пример:
// eslint-disable-next-line
var name = "John";
Даже если в конфигурации запрещено использование var,
отсутствие точки с запятой или присутствуют другие нарушения,
предупреждения для этой строки не появятся.
Чаще требуется отключить только определённое правило.
Синтаксис:
// eslint-disable-next-line rule-name
Пример:
// eslint-disable-next-line no-console
console.log("Debug");
Здесь отключается исключительно правило no-console.
Если на строке присутствуют другие нарушения, ESLint продолжит их обнаруживать.
Например:
// eslint-disable-next-line no-console
var test = console.log("Debug");
В этом случае предупреждение по no-console исчезнет, но
ошибка по правилу no-var останется.
Допускается перечисление нескольких правил через запятую.
// eslint-disable-next-line no-console, no-alert
console.log("Test");
Другой пример:
// eslint-disable-next-line no-console, no-unused-vars
const debugValue = 100;
console.log(debugValue);
Указанные правила будут проигнорированы только для следующей строки.
Для отключения анализа непосредственно на строке используется комментарий в конце инструкции.
console.log("Debug"); // eslint-disable-line
В этом случае ESLint игнорирует все правила только для данной строки.
Отключение конкретного правила:
console.log("Debug"); // eslint-disable-line no-console
Несколько правил:
console.log("Debug"); // eslint-disable-line no-console, no-alert
Такой вариант часто применяется при единичных исключениях и позволяет избежать появления отдельной строки с комментарием.
Для отключения проверок на участке кода используется пара комментариев:
/* eslint-disable */
код
/* eslint-enable */
Пример:
/* eslint-disable */
var user = "John";
console.log(user);
/* eslint-enable */
Все правила будут отключены между двумя комментариями.
После появления eslint-enable анализ возобновляется в
обычном режиме.
Вместо полного отключения рекомендуется указывать конкретное правило.
/* eslint-disable no-console */
console.log("Message");
console.log("Another message");
/* eslint-enable no-console */
Такой подход безопаснее, поскольку остальные проверки продолжают работать.
/* eslint-disable no-console, no-alert */
console.log("Test");
alert("Warning");
/* eslint-enable no-console, no-alert */
Внутри блока будут отключены только перечисленные правила.
Иногда необходимо исключить из проверки целый файл.
Комментарий должен располагаться в начале файла:
/* eslint-disable */
Пример:
/* eslint-disable */
var globalValue = 10;
console.log(globalValue);
После такого комментария весь файл будет исключён из анализа.
Более предпочтительный вариант:
/* eslint-disable no-console */
Пример:
/* eslint-disable no-console */
function start() {
console.log("Application started");
}
Отключается только указанное правило, остальные продолжают действовать.
Любое ранее отключённое правило можно вернуть в работу через
eslint-enable.
Пример:
/* eslint-disable no-console */
console.log("Debug information");
/* eslint-enable no-console */
console.log("Another message");
Вторая инструкция снова будет проверяться правилом
no-console.
Во многих командах принято сопровождать отключение пояснением.
Пример:
// eslint-disable-next-line no-console -- требуется логирование при запуске приложения
console.log("Application started");
Другой пример:
// eslint-disable-next-line no-await-in-loop -- последовательное выполнение обязательно
await processItem(item);
Такие комментарии помогают понять мотивацию разработчика и упрощают код-ревью.
Начиная с современных версий ESLint допускается использование описания после двух дефисов.
// eslint-disable-next-line no-console -- используется для диагностики в production
console.log(error);
Описание не влияет на работу линтера, но повышает читаемость кода.
Со временем необходимость в отключении правила может исчезнуть. ESLint умеет выявлять подобные ситуации.
Пример конфигурации:
{
"reportUnusedDisableDirectives": true
}
Либо:
{
"linterOptions": {
"reportUnusedDisableDirectives": true
}
}
Если правило больше не генерирует предупреждение, ESLint сообщит о бесполезном комментарии отключения.
Пример:
// eslint-disable-next-line no-console
const value = 10;
Если на следующей строке отсутствует вызов console.log,
директива будет считаться лишней.
eslint-disableВо многих проектах существуют дополнительные правила контроля.
Например, правило:
eslint-comments/no-unused-disable
из плагина ESLint Comments помогает находить устаревшие отключения.
Также могут использоваться организационные требования:
eslint-disable;// eslint-disable-next-line no-console
console.log(response);
Часто применяется во время разработки или диагностики ошибок.
// eslint-disable-next-line no-underscore-dangle
const internal = library._internal;
Некоторые внешние API не соответствуют внутренним стандартам проекта.
// eslint-disable-next-line no-undef
analytics.track(event);
Иногда объект создаётся внешним скриптом и отсутствует в области видимости ESLint.
// eslint-disable-next-line no-await-in-loop -- требуется последовательная обработка
await sendRequest(item);
Отключение отражает осознанное отклонение от общей рекомендации.
eslint-disableПлохо:
/* eslint-disable */
console.log(data);
Лучше:
// eslint-disable-next-line no-console
console.log(data);
Чем меньше область действия отключения, тем безопаснее код.
Плохо:
/* eslint-disable */
сотни строк кода
/* eslint-enable */
В таком блоке могут скрываться реальные ошибки, которые никогда не будут обнаружены линтером.
Плохо:
// eslint-disable-next-line no-console
console.log(result);
Лучше:
// eslint-disable-next-line no-console -- временная диагностика ошибки авторизации
console.log(result);
Ошибка:
/* eslint-disable no-console */
console.log("Debug");
// отсутствует eslint-enable
В результате правило остаётся отключённым до конца файла.
Предпочитать точечное отключение.
Вместо:
/* eslint-disable */
использовать:
// eslint-disable-next-line no-console
Минимизировать область действия комментария.
Лучшим вариантом считается отключение для одной строки.
Указывать причину исключения.
Пояснение помогает поддерживать качество кода на протяжении всего жизненного цикла проекта.
Периодически проверять устаревшие директивы.
Неиспользуемые отключения засоряют кодовую базу и затрудняют сопровождение.
Не использовать eslint-disable как средство
обхода правил.
Если необходимость отключения возникает регулярно, проблема чаще всего находится в конфигурации ESLint, а не в конкретной строке кода. В таких случаях разумнее пересмотреть настройки линтера или архитектурные решения проекта.