Механизм применения конфигурации линтера основан на последовательной сборке итогового набора правил из нескольких источников. Конечное поведение формируется не одним файлом, а результатом наложения конфигураций, где каждый следующий слой может расширять или переопределять предыдущий.
В основе лежит принцип: более специфичная и поздно применённая настройка имеет приоритет над более общей.
При обработке конфигурации формируется цепочка источников:
extendsoverridesКаждый следующий уровень потенциально перезаписывает предыдущий, но не удаляет его полностью, а модифицирует итоговое состояние.
extendsМеханизм extends задаёт последовательное наследование
конфигураций. Каждый следующий элемент массива применяется поверх
предыдущего.
Пример логики:
eslint:recommended)plugin:react/recommended)Ключевая особенность заключается в том, что конфликтующие правила не объединяются, а заменяются по ключу. Если одно и то же правило встречается несколько раз, остаётся значение из последнего применённого источника.
Правила являются центральной единицей конфигурации. Их приоритет определяется источником и уровнем специфичности.
--rule)overrides в конфигурацииextendsЕсли одно и то же правило задано в нескольких местах, выбирается значение с более высоким приоритетом, а не объединение настроек.
overridesСекция overrides создаёт контекстно-зависимые
конфигурации. Она применяется после основной конфигурации, но только к
файлам, соответствующим указанным шаблонам.
Логика применения:
overridesfiles или не попадает в
excludedFiles, его конфигурация модифицируетсяПриоритет внутри overrides также линейный: последний
совпавший блок имеет больший вес.
Запуск линтера через командную строку может переопределять конфигурацию проекта.
Наиболее значимые параметры:
--rule — прямое переопределение конкретного
правила--config — указание альтернативного конфигурационного
файла--ext — выбор расширений файлов--ignore-pattern — добавление временных исключенийCLI-настройки имеют наивысший приоритет, так как применяются после загрузки всех конфигураций.
Плагины предоставляют наборы правил и предустановок. Эти наборы
подключаются через extends.
Особенность заключается в том, что плагины:
Если плагин и проект задают одно правило, итоговое значение определяется проектом.
Эти параметры не являются правилами, но влияют на интерпретацию кода.
Формируют контекст парсинга:
Определяет предустановленные глобальные переменные среды выполнения.
Добавляет или переопределяет глобальные идентификаторы.
При конфликте между env и globals приоритет
получает globals, так как он более явный и точечный.
Игнорирование файлов происходит до анализа конфигурации правил.
Последовательность:
.eslintignoreignorePatterns в конфигурации--ignore-pattern из CLICLI-игнорирование имеет наивысший приоритет и применяется последним, окончательно исключая файлы из анализа.
Processors изменяют способ разбиения файлов на части (например, HTML с встроенным JS). После применения processor-а каждый сегмент проходит собственную цепочку конфигурации.
При этом:
overrides может срабатывать как на исходный файл, так и
на сгенерированные части в зависимости от реализации процессораКонфигурации не складываются арифметически. Используется модель:
Пример поведения:
rules: перезапись по ключуenv: объединение ключей с приоритетом последнего
значенияglobals: переопределение по имени глобалаВ современных версиях ESLint используется плоская конфигурация (flat config), где порядок файлов конфигурации становится критическим.
Модель работы:
files определяет область применения блокаВ flat config отсутствует классическая цепочка extends,
вместо неё используется явное перечисление конфигурационных объектов,
что делает порядок записи единственным источником приоритета.
При пересечении нескольких источников применяется детерминированная схема:
"off") всегда перекрывают
включённые значенияОсобый случай — конфигурации плагинов, где "recommended"
наборы могут быть полностью переопределены локальными настройками.
Если существует несколько конфигурационных файлов:
eslint.config.js (flat config).eslintrc.js.eslintrc.json.eslintrc.yamlвыбирается только один механизм в зависимости от режима работы. В смешанных сценариях приоритет отдаётся flat config, а legacy-конфигурации игнорируются.
Когда конфигурация собирается из нескольких пакетов:
extendsoverridesИтоговое дерево конфигурации строится как наложение слоёв, где каждый следующий слой может изменить только то, что уже определено или добавить новые значения.
Если несколько overrides совпадают с файлом:
Таким образом, последний совпавший блок определяет итоговое поведение для каждого конкретного правила.
Сводная логика приоритетов:
Каждый уровень полностью или частично перекрывает предыдущий, формируя конечное поведение анализа кода в ESLint