eslint-plugin-unicorn — один из наиболее насыщенных и прагматичных наборов правил для ESLint, ориентированный на улучшение качества JavaScript и TypeScript-кода за счёт устранения типичных ошибок, антипаттернов и неочевидных проблем производительности. Плагин не дублирует базовые правила ESLint, а расширяет их, предлагая более строгие и современно ориентированные проверки, часто опирающиеся на актуальные возможности языка и практики экосистемы Node.js и браузера.
Плагин построен вокруг идеи «код должен быть не только корректным, но и современным, предсказуемым и лишённым избыточных конструкций». В отличие от многих линтинговых наборов, ориентированных на стиль, eslint-plugin-unicorn делает упор на:
Большая часть правил имеет эвристический характер и направлена не на синтаксическую корректность, а на семантические улучшения.
Плагин подключается как обычная зависимость проекта:
npm install eslint-plugin-unicorn --save-dev
Далее он добавляется в конфигурацию ESLint:
module.exports = {
plugins: ["unicorn"],
extends: ["plugin:unicorn/recommended"]
};
Рекомендуемая конфигурация включает набор правил, которые считаются безопасными для большинства проектов. Однако реальная сила плагина раскрывается при тонкой настройке отдельных правил.
Правила можно условно разделить на несколько групп по характеру проверок.
Эта группа направлена на устранение избыточных операций со строками и использование более выразительных методов.
Типичные проверки:
String.prototype.replaceAll вместо
регулярных выражений в простых случаях;Пример антипаттерна:
const message = "Hello " + name + "!";
Рекомендуемая форма:
const message = `Hello ${name}!`;
Плагин активно продвигает использование встроенных методов массивов вместо ручных циклов.
Ключевые проверки:
Array.prototype.at вместо индексирования с
вычислением длины;Array.from вместо циклического
заполнения;for-циклов, когда возможен
map, filter, reduce.Пример:
const last = arr[arr.length - 1];
Предпочтительно:
const last = arr.at(-1);
Часть правил ориентирована на предотвращение потенциальных ошибок исполнения.
eslint-plugin-unicorn анализирует конструкции, которые могут приводить к runtime-ошибкам:
undefined и null без явной
проверки;== вместо ===.Пример:
if (value == null) {
// обработка
}
Такой код часто допускается, но может скрывать неоднозначные состояния. Плагин стимулирует явность:
if (value === null || value === undefined) {
// обработка
}
Одна из ключевых задач — замена legacy-решений на современные API.
Object.assign → spread-операторы;Array.prototype.indexOf → includes;Number.isNaN.Пример:
if (arr.indexOf(item) !== -1) {
// логика
}
Рекомендуемая форма:
if (arr.includes(item)) {
// логика
}
Плагин включает проверки, направленные на унификацию структуры:
Пример нарушения:
const d = new Date();
Предпочтительно:
const currentDate = new Date();
eslint-plugin-unicorn уделяет внимание корректной обработке ошибок:
Пример антипаттерна:
try {
doSomething();
} catch (e) {}
Рекомендуемая форма:
try {
doSomething();
} catch (error) {
logger.error(error);
}
В асинхронных сценариях плагин проверяет:
async/await;then-цепочек;Пример:
fetch(url).then(res => res.json());
Предпочтительно:
const res = await fetch(url);
const data = await res.json();
Некоторые правила направлены на уменьшение лишней вычислительной нагрузки:
Пример:
for (let i = 0; i < arr.length; i++) {
console.log(arr.slice().length);
}
Подобные конструкции считаются крайне неэффективными из-за повторного создания копий данных.
eslint-plugin-unicorn может работать в связке с TypeScript через
@typescript-eslint. Однако часть правил требует аккуратной
настройки, поскольку:
Практика показывает, что оптимально отключать правила, пересекающиеся с типовой системой, и оставлять семантические проверки.
Плагин содержит десятки правил, каждое из которых можно тонко настроить:
rules: {
"unicorn/prevent-abbreviations": "off",
"unicorn/filename-case": ["error", { case: "kebabCase" }],
"unicorn/no-null": "off"
}
eslint-plugin-unicorn нередко пересекается с:
На практике важно разделять зоны ответственности:
При внедрении в крупные проекты возникают характерные сложности:
Обычно применяется поэтапный rollout:
recommended;В CI плагин часто используется как gatekeeper качества. Типичная схема:
unicorn блокируют merge;Такой подход позволяет постепенно стабилизировать кодовую базу без блокировки разработки.
При длительном использовании eslint-plugin-unicorn заметно влияет на стиль проектирования:
Это приводит к тому, что кодовая база начинает постепенно «самоочищаться» от устаревших конструкций и неявных решений.