В ESLint форматтеры определяют способ представления результатов анализа кода после выполнения линтинга. Сам механизм проверки правил отделён от представления результата, что позволяет гибко менять формат вывода без изменения логики анализа.
Сторонние форматтеры расширяют стандартные возможности вывода и позволяют адаптировать отчёты под конкретные процессы разработки, CI/CD-системы и требования команд.
После анализа файлов ESLint формирует массив результатов, где каждый элемент содержит:
Форматтер получает этот массив и преобразует его в текстовый или структурированный вывод.
Обобщённая схема:
lint results → formatter → output (console / file / CI system)
Разделение анализа и представления делает форматтеры взаимозаменяемыми компонентами.
ESLint включает несколько встроенных форматтеров:
Однако встроенные варианты не всегда подходят для сложных процессов автоматизации, поэтому активно используются сторонние решения.
Сторонние форматтеры решают задачи:
ESLint позволяет использовать внешний модуль через параметр
--format или -f.
Пример:
eslint . -f eslint-formatter-pretty
При использовании Node.js модуль форматтера загружается динамически
через require.
Также возможно указание пути:
eslint . -f ./formatters/custom-formatter.js
Форматтер представляет собой функцию, которая принимает результаты линтинга и возвращает строку.
Базовая сигнатура:
function formatter(results, context) {
return stringOutput;
}
Где:
results — массив объектов результатов анализаcontext — дополнительная информация (например,
cwd, rulesMeta)Каждый объект результата содержит:
{
filePath: string,
messages: Array<{
ruleId: string,
message: string,
line: number,
column: number,
severity: 1 | 2
}>,
errorCount: number,
warningCount: number
}
module.exports = function(results) {
let output = '';
results.forEach(file => {
if (file.messages.length === 0) return;
output += `\n${file.filePath}\n`;
file.messages.forEach(msg => {
output += ` [${msg.severity === 2 ? 'error' : 'warn'}] `
+ `${msg.line}:${msg.column} `
+ `${msg.message} (${msg.ruleId})\n`;
});
});
return output || 'No problems found';
};
Такой форматтер заменяет стандартный вывод и упрощает восприятие ошибок в больших проектах.
Используется для человекочитаемого вывода с улучшенной структурой и цветовым выделением. Часто применяется в локальной разработке и CI.
Фокусируется на минималистичном выводе с группировкой ошибок по файлам.
Преобразует результаты в JSON-структуру для последующей обработки:
eslint . -f json > report.json
Такой формат часто используется в аналитических системах и пайплайнах.
Генерирует HTML-отчёты, удобные для просмотра в браузере. Применяется в QA-процессах и статических отчётах сборок.
Формат JUnit XML используется в системах непрерывной интеграции:
Пример вызова:
eslint . -f junit > report.xml
В CI-средах форматтеры выполняют роль адаптера между ESLint и системой отчётности.
Типичные сценарии:
Пример pipeline:
eslint src/ -f json -o eslint-report.json
Далее файл может использоваться для:
В проектах часто используется комбинация Prettier и ESLint.
При этом важно различать роли:
Конфликт возникает, когда оба инструмента пытаются контролировать стиль. Для устранения противоречий применяются:
Форматтеры ESLint при этом остаются независимым слоем вывода.
Сложные форматтеры могут включать:
Ошибки агрегируются и сортируются:
Используются ANSI-escape последовательности для терминалов.
Добавляются итоговые блоки:
На больших кодовых базах форматтер может стать узким местом.
Факторы влияния:
Оптимизации:
Форматтеры зависят от структуры объектов результатов. При изменении API ESLint могут происходить:
Поэтому сторонние форматтеры часто фиксируют поддерживаемую версию ESLint или используют адаптеры совместимости.
В крупных проектах форматтеры часто:
Типичная структура:
/tools
/eslint-formatters
custom.js
ci-formatter.js
Использование:
eslint . -f ./tools/eslint-formatters/ci-formatter.js
Сторонние форматтеры становятся частью системы наблюдаемости кода:
JSON-формат особенно часто используется для автоматического анализа:
{
"errorCount": 12,
"warningCount": 5,
"files": 34
}
Такие данные легко агрегируются и визуализируются.
Форматтеры применяются не только для вывода в консоль:
В этих случаях форматтер фактически становится трансформером данных ESLint в формат внешней системы.