В конфигурации ESLint секция rules определяет набор
правил анализа кода и их поведение. Каждое правило представляет собой
отдельную проверку синтаксиса, стиля или потенциальных ошибок, а вся
секция выступает центральной частью системы линтинга, формируя
фактическую политику качества кода.
rulesВ классическом формате конфигурации (.eslintrc) секция
представляет собой объект, где ключ — имя правила, а значение — его
настройка:
{
"rules": {
"no-unused-vars": "error",
"eqeqeq": "warn",
"curly": "error"
}
}
Каждое правило идентифицируется строкой вида
plugin/rule-name или просто rule-name, если
оно встроенное.
Существует несколько допустимых форматов записи:
"no-console": "off"
"no-console": 0
"eqeqeq": ["error", "always"],
"quotes": ["warn", "single"]
Массив используется, когда правило поддерживает дополнительные параметры.
Каждое правило в ESLint имеет уровень строгости, который определяет реакцию линтера на нарушение.
off / 0Полное отключение правила.
"no-debugger": "off"
или
"no-debugger": 0
Характеристика:
Используется для локального подавления ненужных проверок или временного отключения во время разработки.
warn / 1Предупреждение без остановки процесса.
"no-unused-vars": "warn"
или
"no-unused-vars": 1
Особенности:
Типичный сценарий — мягкое внедрение новых стандартов без блокировки разработки.
error / 2Критический уровень.
"eqeqeq": "error"
или
"eqeqeq": 2
Поведение:
Этот уровень применяется для правил, влияющих на корректность выполнения программы или критические дефекты.
Многие правила поддерживают дополнительную конфигурацию через массив:
{
"quotes": ["error", "single", { "avoidEscape": true }]
}
Структура массива:
off | warn | error)eqeqeq{
"eqeqeq": ["error", "always"]
}
Здесь:
error — уровень строгостиalways — режим, требующий строгого сравнения
===no-console с исключениями{
"no-console": ["warn", { "allow": ["warn", "error"] }]
}
Такой подход позволяет:
consoleВ реальных проектах правила редко задаются в одном месте. Они объединяются из нескольких источников:
extends)Пример:
{
"extends": "eslint:recommended",
"rules": {
"no-console": "off",
"eqeqeq": "error"
}
}
Механизм работает по принципу приоритета: локальные правила всегда перекрывают наследуемые.
Плагины добавляют собственные правила, которые подключаются через префикс:
{
"rules": {
"react/jsx-key": "error",
"import/no-unresolved": "error"
}
}
Структура имени:
pluginName/ruleName
Особенности:
В крупных проектах секция rules может содержать десятки
и сотни правил. Для управления используют:
{
"rules": {
// ошибки
"no-undef": "error",
"no-unused-vars": "error",
// стиль
"quotes": "warn",
"semi": "warn"
}
}
module.exports = {
rules: {
// потенциальные ошибки
"no-eval": "error",
// предпочтения стиля
"camelcase": "warn"
}
}
ESLint допускает эквивалентные формы записи:
| Уровень | Строка | Число |
|---|---|---|
| off | “off” | 0 |
| warn | “warn” | 1 |
| error | “error” | 2 |
Числовая форма исторически сохраняется для обратной совместимости, но строковая считается более читаемой.
В конфигурациях поддерживаются локальные изменения через
overrides:
{
"overrides": [
{
"files": ["*.test.js"],
"rules": {
"no-unused-expressions": "off"
}
}
]
}
Такой механизм позволяет:
При объединении конфигураций действует следующая логика:
extends)rulesoverridesКаждый следующий слой перекрывает предыдущий.
rules"quotes": "error",
"quotes": ["warn", "single"]
Последнее значение перезапишет первое.
"react/jsx-uses-react": "error"
без подключения eslint-plugin-react приводит к ошибке
загрузки конфигурации.
"eqeqeq": ["error", "always", "extra", "value"]
Лишние параметры игнорируются или приводят к непредсказуемому поведению в зависимости от правила.
Каждое правило в системе ESLint представляет собой независимый модуль, который:
анализирует AST (Abstract Syntax Tree)
применяет набор проверок
возвращает результат в виде:
Секция rules лишь управляет тем, как интерпретировать
результат работы этих модулей, но не определяет их внутреннюю
логику.
Система уровней и синтаксиса позволяет строить конфигурации различной строгости:
warn)error)off для
временных исключений)Такой подход делает систему линтинга адаптируемой к различным стадиям разработки и требованиям проекта.