Встроенные правила ESLint исторически покрывают базовый набор проблем качества кода: ошибки синтаксиса, потенциально опасные конструкции и минимальные требования к читаемости. Однако по мере развития экосистемы JavaScript стало очевидно, что часть этих правил либо слишком ограничена, либо должна быть расширяема под разные стили кодирования и фреймворки. Это привело к появлению множества правил-заменителей, которые берут на себя функции core-правил или полностью вытесняют их в специализированных конфигурациях и плагинах.
Ключевой мотив замены встроенных правил заключается в разделении ответственности: ядро ESLint отвечает за базовую корректность, а внешние плагины — за стиль, архитектуру и фреймворк-специфику.
Встроенные правила ESLint постепенно изменяли свой статус. Часть из них:
Наиболее заметный сдвиг произошёл в области стилистических правил. Они больше не рассматриваются как часть основной миссии ESLint, поскольку стиль кода субъективен и зависит от команды.
Конфигурация eslint:recommended включает только те
правила, которые считаются критическими для предотвращения ошибок
выполнения. Всё остальное выносится в:
eslint-plugin-*);plugin:react/recommended,
plugin:@typescript-eslint/recommended);Такой подход создаёт естественную замену встроенным правилам: вместо расширения core-набора используются специализированные реализации.
Одним из самых значимых изменений стало выделение стилистических правил в отдельное пространство. Ранее правила вроде:
indentquotessemicomma-dangleнаходились в ядре ESLint, но затем их функциональность была вынесена в отдельный пакет.
Современная замена реализована через
@stylistic/eslint-plugin.
Было (устаревший стиль конфигурации):
{
"rules": {
"indent": ["error", 2],
"quotes": ["error", "single"],
"semi": ["error", "always"]
}
}
Стало:
import stylistic from "@stylistic/eslint-plugin";
export default [
stylistic.configs.recommended
];
При необходимости точечной настройки:
rules: {
"@stylistic/indent": ["error", 2],
"@stylistic/quotes": ["error", "single"],
"@stylistic/semi": ["error", "always"]
}
Такой подход позволяет ядру ESLint оставаться стабильным, а стилистике — развиваться независимо.
Многие встроенные правила оказываются недостаточными в контексте современных фреймворков. Поэтому их функции переносятся в специализированные плагины.
Правила, связанные с JSX и компонентной моделью, заменяются:
eslint-plugin-reacteslint-plugin-react-hooksНапример, логика проверки хуков полностью вынесена из ядра и реализована через:
react-hooks/rules-of-hooksreact-hooks/exhaustive-depsЭто фактически замещает любые гипотетические встроенные проверки React-специфичной логики.
Ранее часть проверок, связанных с окружением Node.js, находилась в core-экосистеме. Сейчас их заменяет:
eslint-plugin-nОн включает правила, которые контролируют:
processПример замены логики:
{
"rules": {
"n/no-missing-import": "error",
"n/no-unpublished-require": "error"
}
}
Работа с импортами вынесена в:
eslint-plugin-importОн заменяет и расширяет базовые проверки модулей:
Пример:
{
"rules": {
"import/no-cycle": "error",
"import/order": "error"
}
}
С переходом на flat config (ESLint 9+) изменилась сама структура конфигурации. Теперь правила заменяются не только через плагины, но и через композицию конфигов.
Пример:
import js from "@eslint/js";
import react from "eslint-plugin-react";
export default [
js.configs.recommended,
react.configs.flat.recommended
];
Здесь происходит не просто добавление правил, а полная замена поведения набора встроенных рекомендаций через внешние конфигурации.
При использовании альтернативных правил важно учитывать возможные конфликты:
Дублирование логики Одно и то же правило может существовать в core и plugin-версии.
Разная строгость Plugin-реализация часто строже, чем устаревший core-аналог.
Разные зоны ответственности Core проверяет синтаксис, плагины — семантику и архитектуру.
Для устранения конфликтов обычно отключают core-правило:
{
"rules": {
"indent": "off",
"@stylistic/indent": "error"
}
}
indent → @stylistic/indentquotes → @stylistic/quotessemi → @stylistic/semicomma-dangle →
@stylistic/comma-dangleeslint-plugin-importeslint-plugin-neslint-plugin-react,
eslint-plugin-vueНекоторые core-правила утратили универсальность:
В результате такие правила либо становятся обёртками над внешними реализациями, либо полностью заменяются.
Современные форматтеры берут на себя часть задач ESLint. Это приводит к тому, что:
Например, использование Prettier фактически заменяет необходимость:
indentquotessemiв ESLint-конфигурации.
Типичный переход включает:
Пример миграции:
{
"rules": {
"no-unused-vars": "error",
"quotes": "off",
"@stylistic/quotes": ["error", "single"]
}
}
Пресеты становятся механизмом массовой замены правил. Они позволяют:
Примеры:
eslint:recommendedplugin:@typescript-eslint/recommendedplugin:@stylistic/recommendedКаждый из них фактически перекрывает часть встроенного поведения ESLint.
Современная архитектура ESLint фактически основана на принципе замещения:
Это приводит к тому, что встроенные правила перестают быть центральной точкой системы и превращаются в один из уровней абстракции, который легко заменяется более специализированными реализациями.