
Привет, Хабр! Меня зовут Никита Ли, я frontend-разработчик в группе Рунити. Так тяжело бывает удержаться от того, чтобы не усложнить себе жизнь, не так ли? Все любят смотреть на чистый и понятный код, но не все его таким пишут. Сделать его таким помогают наши друзья — форматировщики и линтеры. О них и пойдет речь в этой статье, а конкретно о ESLint Stylistic.
Любой автор хочет, чтобы его кто-то читал, даже на JavaScript, но читателю хочется просматривать грамотный и красивый текст. ESLint анализирует код, выявляя ошибки, чтобы программы выходили из-под клавиатуры чистыми и без ошибок. Prettier, в свою очередь, как инструмент форматирования делает текст исходного кода программ единообразным. Оба этих инструмента являются практически стандартом, когда речь заходит о качестве кода. Думаю, что многие сталкивались в проектах с их одновременным применением, что в целом логично — форматирование != линтинг. Однако это решение не всегда обосновано, а зачастую излишне. В качестве альтернативы я предлагаю рассмотреть ESLint Stylistic. В этой статье разберемся, что это, откуда появился инструмент и почему с ним стоит познакомиться.
О чем внутри:
Что такое ESLint Stylistic
ESLint Stylistic (официально @stylistic/eslint-plugin) — это плагин для ESLint, который фокусируется на стилистических правилах, таких как отступы, кавычки, точки с запятой и пробелы. Он позволяет форматировать код в рамках экосистемы ESLint, устраняя необходимость в отдельном форматировщике. Stylistic поддерживает JavaScript, TypeScript, JSX и другие технологии, интегрируясь с существующими плагинами ESLint.
Немного истории о развитии плагина
Изначально ESLint был универсальным инструментом, который включал как правила для поиска ошибок (например, no-undef), так и стилистические правила (например, indent или quotes). Однако в мае 2020 года команда ESLint меняет политику своих правил, в результате которых замораживает стилистические требования. Среди причин, по которым поддержка требований оформления была приостановлена, можно назвать высокую стоимость разработки и поддержки таких правил, тогда как команды хотели взять фокус именно на линтинг и сосредоточиться на правилах для выявления ошибок.
Проект ESLint Stylistic был инициирован сообществом при поддержке OpenJS Foundation и команды ESLint. Его цель — взять на себя поддержку стилистических правил, которые были удалены из ядра ESLint и @typescript-eslint. В 2023 году Stylistic вышел в релиз версии v1.0.0, что ознаменовало его готовность к использованию в продакшене. Сразу после релиза Stylistic основной пакет ESLint обновился до версии v8.53.0, помечая основные правила для форматирования из ядра ESLint как deprecated с рекомендацией миграции на @stylistic/eslint-plugin. В 2024 году произошло очередное крупное обновление ESLlint до v9.0.0, в котором поменялся способ задания конфигурации линтера — flat config (eslint.config.js) вместо deprecated .eslintrc.
Stylistic своим появлением облегчил ядро линтера, убирая лишние стилистические правила для тех, кому они не нужны. В то же время он стал ответом на запросы разработчиков, которые хотели гибко настраивать форматирование кода без конфликтов с тем же Prettier.
Зачем нужен ESLint Stylistic
Stylistic решает несколько ключевых задач:
Объединение линтинга и форматирования
Вместо использования разных инструментов для проверки ошибок и исправления форматирования кода Stylistic позволяет выполнять обе задачи в рамках ESLint. Это упрощает настройку и сокращает время выполнения задач на линтинг и форматирования.
Гибкость настроек
В отличие от Prettier, который навязывает правила с минимальными опциями, Stylistic использует мощь ESLint для детальной настройки. Вы можете задавать разные стили для JavaScript, TypeScript или JSX, а также отключать правила для определенных файлов. Stylistic также работает с плагинами для React/Vue и других технологий, обеспечивая единообразное форматирование в сложных проектах.
Устранение конфликтов
Совместное использование ESLint и Prettier может приводить к конфликтам и использованию лишних пакетов с целью их «помирить» (привет eslint-config-prettier). Stylistic устраняет эти проблемы, так как все правила находятся в одном инструменте.
Производительность
Запуск одного инструмента вместо двух снижает накладные расходы как при разработке, так и в пайплайнах CI/CD.
Облегчение миграции на новые версии ESLint
С выходом ESLint 9 и переходом на плоскую конфигурацию (eslint.config.js) многие разработчики столкнулись с проблемами при адаптации стилистических правил. Stylistic поддерживает как устаревшую (.eslintrc), так и новую конфигурацию, упрощая миграцию.
Пример конфига для форматирования eslint.config.js
Наш проект на Vue с использованием TypeScript и микрофронтенд архитектуры в монорепозитории. Stylistic отлично вписался в наш конфиг, что позволило отказаться от Prettier, убрать лишние запуски форматировщика и более гибко настроить правила форматирования в проекте.
Пример простейшей настройки плоского конфига eslint для использования Stylistic приведу ниже:
// eslint.config.js
import stylistic from '@stylistic/eslint-plugin';
export default [
{
plugins: {
'@stylistic': stylistic,
},
rules: {
'@stylistic/indent': ['error', 4],
'@stylistic/semi': ['error', 'always'],
'@stylistic/no-trailing-spaces' : ['error'],
'@stylistic/eol-last' : 'error',
'@stylistic/max-len' : [2, 150, {
ignoreUrls : true,
ignoreTrailingComments : true,
ignoreRegExpLiterals : true,
},
],
},
},
];
Этот пример задает отступы в 4 пробела, обязательные точки с запятой, запрещает оставлять пробел в конце строки и обязывает оставлять свободной последнюю строку в файле, а также предлагает правила для максимальной длины строки. Запуск eslint --fix . автоматически отформатирует код и исправит ошибки. Пример:
// До
function greet(name){
console.log("Hello, "+name)
}
// После (eslint --fix)
function greet(name) {
console.log('Hello, ' + name);
}
Stylistic позволяет гибко настроить форматирование кода, благодаря большому количеству встроенных правил и дополнительных плагинов с большой кастомизацией.
Как мигрировать с Prettier на Stylistic
Переход с Prettier на Stylistic не так сложен, как может показаться. Здесь описан процесс миграции со старого ядра ESLint на Stylistic, если необходимо также обновить сам ESLint. Приведу пошаговый план для перехода с Prettier на Stylistic с актуальной версией ESLint с плоским конфигом:
Установите Stylistic с вашим пакетным менеджером
npm install ‑D @stylistic/eslint‑pluginОбновите конфигурацию ESLint
Удалите плагины, связанные с Prettier (eslint-config-prettier, eslint-plugin-prettier), и добавьте Stylistic.Настройте правила
При выборе стилистических правил можно перенести их прямо из prettier конфига благодаря configuration factory. Или мигрируйте настройки Prettier (например, singleQuote: true, semi: true) в эквивалентные правила Stylistic. В документации есть удобная таблица для поиска правил, которые подойдут вашему проекту.Проверьте проект
Запустите eslint --fix . и проверьте, что код форматируется корректно. Исправьте конфликты вручную, если они возникнут.-
Обновите процессы
Удалите Prettier из скриптов package.json, CI/CD и интеграций с редактором. Готово! Ваш проект теперь использует Stylistic.Пример миграции старых стилистических правил на новые:
import stylistic from '@stylistic/eslint-plugin;
export default [
{
plugins: {
'@stylistic': stylistic
},
rules: {
// Если уже пользовались правилами ESLint для форматирования
// Просто добавьте @stylistic/ префикс
// Аналогично для @typescript-eslint/
// И eslint-plugin-react
// Например 'semi' -> '@stylistic/semi'
'@stylistic/semi': 'error',
},
},
];
Итог: стоит ли переходить на Stylistic?
Чтобы определиться с выбором, предлагаю взглянуть на следующую таблицу:

ESLint Stylistic — это не просто плагин, а новый подход к форматированию кода в JavaScript и TypeScript проектах. Он появился как ответ на запрос сообщества в сохранении стиля кода, потребности в гибкости настройки форматирования, а также для облегчения поддержки ядра ESLint. Stylistic решает проблемы конликтов, дублирования инструментов и ограниченных настроек, предлагая единый, мощный и настраиваемый процесс.
Если вы хотите упростить конфигурацию и получить больше контроля над стилем кода, то вам стоит попробовать Stylistic.

Бонус: плагины ESLint, достойные внимания
Вместе с проверками на форматирование и стиль кода многие используют плагины с наборами правил для конкретных инструментов, такие как eslint-plugin-react или eslint-plugin-vue, о которых слышали почти все, но поделюсь еще подборкой интересных расширений, которые могут облегчить вам жизнь:
Хорошие практики:
eslint-plugin-sonarjs — обеспечит консистентность и соблюдение правил «чистого кода». Например, подсвечивает оставленные TODO комментарии или может рекомендовать декомпозировать слишком большую функцию;
eslint-plugin-unicorn — большое количество рекомендаций для соблюдения хороших практик в коде. Например, правила, запрещающие сокращения в именах переменных для ясности, или правила для упрощения регулярных выражений;
eslint-plugin-no-secrets — сохранит ваши секреты в тайне.
Поможет улучшить тесты:
eslint-plugin-jest — не даст писать бесполезные тесты с Jest;
eslint-plugin-vitest — улучшает тестирование с Vitest;
eslint-plugin-testing-library — следит за соблюдением лучших практик в тестах с Testing Library.
Добавит поддержку других форматов:
eslint-plugin-jsonc / @eslint/json — поддержка линтинга и форматирования json;
eslint-plugin-yml — поддержка линтинга и форматирования yml;
eslint-plugin-graphql — поддержка линтинга и форматирования GraphQL;
@eslint/markdown — линтинг js внутри md;
eslint-plugin-markdownlint — интеграция линтера md markdownlint в ESLint.
Поможет с построением чистой архитектуры:
eslint-plugin-boundaries — анализирует зависимости и структуру, помогая в поддержке чистоты архитектуры;
eslint-plugin-import — помогает следить за импортами в файлах;
@nx/eslint-plugin — набор правил полезный для монорепозиториев с nx.
Эти плагины дополняют ESLint Stylistic, помогая не только форматировать код, но и улучшать его качество. А чем вы пользуетесь для обеспечения красоты кода в своих проектах? Делитесь опытом или полезными плагинами/правилами ESLint, которые я не упомянул, в комментариях!
Комментарии (9)
vanichh
03.06.2025 16:21Смотрю все инструменты объеденяются, вот недавно ребята TypeScript анонсировали что их движок будет css переваривать и тут тоже самое получатеся, осталось за малым, научить TS форматировать)
neketli Автор
03.06.2025 16:21Формально всё работает на JS и мы пишем TS который транспилируется, styled components которые тоже прям в JS'e ну и ESLint сам запускается на node. Так что слава джаваскрипту!
tyrus_rus
03.06.2025 16:211) После автоформатирования не
console.log('Hello, ' + name);
должно получаться, а
console.log(`Hello, ${name}`);
2) Скорость? Ктонть замерял
3) Насчёт неудобных конфигов или конфликтов - все решается буквально один раз и выносится с npm компании либо в шаред либу монорепы и забывается до апдейта верссий внешних зависимостей
Пока просто не увидел зачем мне тратить время на переписывание конфига и проверки совместимости новых депенденси?
neketli Автор
03.06.2025 16:21Привет, отвечу на твои вопросы
1. В приведенном примере указан базовый конфиг только для стилистических правил stylistic, которые касаются непосредственно оформления - пробелов, кавычек и т.д. Если предпочитаете шаблонные строки конкатенации - можете использовать это правило из стандартного ESLint и тогда всё будет именно так как вам хочется)
2. Замеры скорости отдельно взятых инструментов проводить нет особого смысла просто потому что они разные и у них разный принцип действия. Простой конфиг с запуском Prettier будет всегда быстрее ESLint даже с набором из 4-5 правил, так как он не анализирует код, а просто его переписывает. Вот статья в которой приведён пример сравнения перфоманса этих инструментов и, естественным образом, Prettier в ~5 раз быстрее ESLint. Посыл статьи скорее в том что если в проекте используется ESLint, то использовать дополнительно Prettier может быть лишним, т.к. можно ограничиться запуском только одного инструмента, который будет работать чаще всего быстрее, чем два.
3. Это не отменяет необходимость использования дополнительных пакетов и плагинов типаeslint-plugin-prettier
которые используют Prettier как правила ESLint и сводят весь перфоманс на нет. Плюс ко всему появляется отдельный конфиг с возможностью использования отдельного инструмента - зачем если пользоваться унифицированным решением проще и дешевле, но это, конечно, моё мнение и я тоже могу ошибаться
deamondz
быстрый гуглёж не дал результатов, спрошу тут:
а этот пакет может заменить @trivago/prettier-plugin-sort-imports?
neketli Автор
Вместо этого плагина для prettier, вы можете использовать eslint-plugin-import, для ESLint, если угодно, там можно настроить и линтинг сортировки импортов