Объекты конфигурации и их поля

Конфигурация ESLint представляет собой JavaScript-объект (или набор объектов), определяющий правила анализа кода, подключаемые плагины, среду выполнения и поведение линтера. В зависимости от используемого формата — классического .eslintrc или нового Flat Config — структура и набор полей различаются, однако концептуальная модель остаётся общей: декларативное описание правил проверки исходного кода.


Базовая модель конфигурации

Конфигурационный объект ESLint в классическом формате строится вокруг нескольких ключевых групп полей:

  • определение среды выполнения (browser, node, es6 и т.д.)
  • подключение парсера
  • настройка синтаксического анализа
  • регистрация плагинов
  • набор правил
  • наследование конфигураций
  • локальные переопределения

Каждое поле влияет на отдельный этап анализа исходного кода: от разбора AST до применения правил и формирования отчёта.


Поле env

env определяет предустановленные глобальные переменные и режимы выполнения.

Пример структуры:

env: {
  browser: true,
  node: true,
  es2021: true
}

Назначение

  • включает набор глобальных переменных (window, process, document)
  • активирует специфические правила или поведение парсера
  • влияет на допустимый синтаксис

Особенности

  • значения интерпретируются как булевы флаги
  • несколько сред могут быть активны одновременно
  • не заменяет globals, а дополняет их

Поле globals

globals задаёт пользовательские глобальные переменные.

globals: {
  MyGlobal: "readonly",
  DEBUG: "writable"
}

Режимы доступа

  • "readonly" — запрещена модификация
  • "writable" — разрешена запись
  • "off" — отключение проверки переменной

Поведение

  • не влияет на среду выполнения
  • используется исключительно линтером
  • перекрывает автоматические предположения ESLint

Поле parser

parser определяет парсер JavaScript/TypeScript кода.

parser: "@babel/eslint-parser"

Роль

  • преобразование исходного кода в AST
  • поддержка нестандартных синтаксических расширений
  • совместимость с современными версиями ECMAScript

Типичные значения

  • espree (по умолчанию ESLint)
  • @babel/eslint-parser
  • @typescript-eslint/parser

Поле parserOptions

parserOptions задаёт параметры анализа кода.

parserOptions: {
  ecmaVersion: 2022,
  sourceType: "module",
  ecmaFeatures: {
    jsx: true
  }
}

Основные параметры

ecmaVersion

Определяет версию ECMAScript.

  • число (2020, 2021, 2022)
  • или "latest"

sourceType

  • "script" — классические скрипты
  • "module" — ES-модули

ecmaFeatures

Флаги дополнительных возможностей:

  • jsx — поддержка JSX
  • globalReturn — разрешение return на верхнем уровне

Влияние

  • определяет допустимый синтаксис
  • влияет на корректность построения AST
  • может блокировать анализ при несовместимых значениях

Поле plugins

plugins подключает внешние расширения ESLint.

plugins: ["react", "@typescript-eslint"]

Характеристика

  • не включает правила автоматически
  • только регистрирует пространство имён
  • требует явного включения правил

Поведение

Правила подключаются через:

rules: {
  "react/jsx-uses-react": "error"
}

Поле rules

rules — центральная часть конфигурации, определяющая поведение линтера.

rules: {
  semi: "error",
  quotes: ["error", "single"],
  "no-console": "warn"
}

Уровни строгости

  • "off" — отключено
  • "warn" — предупреждение
  • "error" — ошибка

Формат с параметрами

"eqeqeq": ["error", "always"]

или

"max-len": ["warn", { "code": 100 }]

Логика применения

  • выполняется после построения AST
  • может использовать контекст файла
  • зависит от parserOptions и env

Поле extends

extends позволяет наследовать готовые конфигурации.

extends: ["eslint:recommended", "plugin:react/recommended"]

Типы источников

  • встроенные конфигурации ESLint
  • конфигурации плагинов
  • внешние пакеты (shareable configs)

Механизм объединения

  • конфигурации накладываются каскадно
  • последующие значения переопределяют предыдущие
  • массивы правил объединяются с приоритетом последнего источника

Поле overrides

overrides позволяет применять разные настройки для отдельных файлов.

overrides: [
  {
    files: ["*.test.js"],
    rules: {
      "no-unused-expressions": "off"
    }
  }
]

Возможности

  • сегментация конфигурации по маскам файлов
  • переопределение любых полей конфигурации
  • применение разных парсеров

Поля внутри overrides

  • files
  • excludedFiles
  • rules
  • env
  • parser
  • parserOptions

Поле settings

settings используется для передачи данных в плагины.

settings: {
  react: {
    version: "detect"
  }
}

Особенности

  • не влияет на ESLint напрямую
  • доступно внутри плагинов через контекст
  • используется для конфигурации библиотек

Поле root

root: true

Назначение

  • останавливает поиск конфигураций вверх по дереву директорий
  • фиксирует текущий файл как корневой

Поведение

  • предотвращает наследование глобальных конфигов
  • используется в монорепозиториях и изолированных проектах

Поле ignorePatterns

ignorePatterns: ["dist/", "node_modules/"]

Функции

  • исключает файлы из анализа
  • работает как встроенный .eslintignore

Особенности

  • поддерживает glob-шаблоны
  • может сочетаться с .eslintignore
  • применяется до анализа AST

Flat Config (ESLint нового формата)

Flat Config использует массив объектов вместо одного конфигурационного объекта.

export default [
  {
    files: ["**/*.js"],
    rules: {
      semi: "error"
    }
  }
]

Поле files

files: ["**/*.js"]

Назначение

  • определяет область применения конфигурации
  • заменяет overrides.files в новом формате

Поведение

  • используется глобально на уровне каждого объекта конфигурации
  • поддерживает glob-синтаксис

Поле ignores

ignores: ["dist/**"]

Функция

  • исключает файлы из анализа в Flat Config
  • аналог ignorePatterns

Отличие

  • работает на уровне каждого конфигурационного блока
  • может комбинироваться с другими блоками

Поле languageOptions

languageOptions: {
  ecmaVersion: 2023,
  sourceType: "module",
  globals: {
    window: "readonly"
  }
}

Назначение

Объединяет:

  • parserOptions
  • globals
  • выбор парсера

Структура

  • ecmaVersion
  • sourceType
  • globals
  • parser

Поле linterOptions

linterOptions: {
  reportUnusedDisableDirectives: true
}

Функции

  • управление поведением линтера
  • контроль специальных директив ESLint

Основные параметры

  • reportUnusedDisableDirectives
  • noInlineConfig

Поле plugins (Flat Config)

В новом формате плагины подключаются как объекты:

import react from "eslint-plugin-react";

export default [
  {
    plugins: {
      react
    }
  }
]

Особенности

  • отсутствуют строковые алиасы
  • плагины импортируются явно
  • правила вызываются через объектную структуру

Поле rules (Flat Config)

rules: {
  "react/jsx-uses-react": "error"
}

Поведение

  • идентично классическому формату
  • требует явного подключения плагинов
  • поддерживает параметризацию правил

Механизм объединения конфигураций

Классический формат

  • цепочка extends
  • локальные переопределения
  • каскадная модель приоритетов

Flat Config

  • линейный массив конфигураций
  • порядок элементов определяет приоритет
  • более предсказуемое поведение

Приоритет полей

При конфликте конфигураций применяется следующая логика:

  1. overrides / files (или соответствующие блоки Flat Config)
  2. локальные rules
  3. extends
  4. базовые настройки ESLint

Взаимодействие полей

  • parser и parserOptions определяют структуру AST
  • env и globals влияют на семантический анализ
  • plugins расширяют набор доступных правил
  • rules формируют конечную политику анализа
  • overrides и files сегментируют конфигурацию

Типовые ошибки конфигурации

  • конфликт parser и parserOptions.ecmaVersion
  • отсутствие подключения плагина при использовании его правил
  • перекрытие env и globals без учёта приоритетов
  • некорректные glob-шаблоны в files и ignorePatterns
  • дублирование правил с разной строгостью в extends