Свойство settings в конфигурации ESLint представляет
собой глобальное хранилище произвольных данных, доступных всем правилам
и плагинам в процессе линтинга. Оно не влияет напрямую на синтаксический
анализ кода и не участвует в проверке ECMAScript-спецификации, но
используется как механизм передачи контекстной информации между
конфигурацией и правилами.
Главная особенность заключается в том, что settings
существует вне конкретного файла и вне области отдельного правила,
формируя общий контекст анализа проекта.
Ключевые характеристики:
settings представляет собой обычный объект JavaScript,
содержащий пары ключ–значение.
Типовая форма:
{
"settings": {
"key": "value",
"nestedKey": {
"subKey": "value"
}
}
}
Допускаются:
Не допускаются:
Любое правило ESLint получает доступ к конфигурационному контексту
через объект context. Внутри него settings
доступен как:
context.settings
Пример использования внутри правила:
export default {
create(context) {
const config = context.settings.myLibrary || {};
return {
Identifier(node) {
if (config.strictMode && node.name === "eval") {
context.report({
node,
message: "Использование eval запрещено в строгом режиме"
});
}
}
};
}
};
Таким образом, settings выступает каналом связи между
конфигурацией проекта и логикой правила.
settings является глобальным для всего процесса
линтинга. Это означает:
При этом значения не зависят от конкретного файла, в отличие от
parserOptions или overrides.
При использовании нескольких конфигурационных уровней
(extends, базовые конфиги, локальные настройки) происходит
объединение settings.
Основные принципы:
Пример:
Базовая конфигурация:
{
"settings": {
"env": "production",
"api": {
"version": 1
}
}
}
Расширяющая конфигурация:
{
"settings": {
"api": {
"version": 2
}
}
}
Результат объединения:
{
"settings": {
"env": "production",
"api": {
"version": 2
}
}
}
Плагины активно используют settings для получения
информации о проекте, которую невозможно извлечь из AST.
Типовые сценарии:
Часто применяется в React-экосистеме:
{
"settings": {
"react": {
"version": "detect"
}
}
}
Внутри правил:
Экосистема импортов использует settings для конфигурации
путей:
{
"settings": {
"import/resolver": {
"node": {
"extensions": [".js", ".ts"]
}
}
}
}
Такая конфигурация позволяет:
Некоторые плагины используют settings как универсальный
канал конфигурации:
settings часто путается с options правил,
однако между ними существует принципиальное различие:
| Характеристика | settings | options правила |
|---|---|---|
| Область | глобальная | локальная (правило) |
| Доступ | все правила | только конкретное правило |
| Структура | свободная | строго определена схемой |
| Назначение | контекст проекта | настройка поведения правила |
В современной системе конфигурации ESLint (flat config) свойство
settings сохраняет свою роль и размещается на верхнем
уровне конфигурационного объекта.
Пример:
export default [
{
settings: {
debug: true,
api: {
endpoint: "https://example.com"
}
}
}
];
Особенности в flat config:
context.settings
без измененийИспользование settings сопровождается рядом
ограничений:
Дополнительная особенность — невозможность реактивного обновления: значения фиксируются на этапе инициализации линтинга.
В крупных проектах settings часто структурируется по
пространствам имён:
{
"settings": {
"react": {
"version": "detect"
},
"import": {
"internalAliases": ["@/"]
},
"project": {
"strict": true
}
}
}
Такой подход снижает вероятность конфликтов между плагинами и упрощает масштабирование конфигурации.
Само наличие settings не влияет на производительность
линтинга, однако косвенно может влиять на поведение правил:
Архитектурно settings выступает как слой
конфигурационного контекста, отделённый от синтаксического анализа кода
и логики правил.