Форматтеры в ESLint отвечают за преобразование результатов анализа кода в человекочитаемый или машинно-обрабатываемый вид. Линтер после проверки файлов формирует массив сообщений о нарушениях правил, но сам по себе не определяет, как именно эти данные будут отображаться. Эту задачу выполняет форматтер.
Каждое сообщение ESLint содержит структурированную информацию: файл,
строку и столбец, идентификатор правила, уровень серьёзности, текст
ошибки, а также дополнительные поля (например, диапазон исправления
fix при наличии автофиксации). Форматтер получает этот
набор данных и преобразует его в конкретный формат вывода: текстовый
отчёт, JSON, XML, таблицу или специализированную структуру для
CI-систем.
Выбор форматтера осуществляется через параметр CLI
--format (или сокращённо -f):
eslint . --format stylish
По умолчанию используется форматтер stylish,
обеспечивающий компактный человекочитаемый вывод.
Дополнительно результат можно сохранять в файл:
eslint . -f json > report.json
или использовать для интеграции в CI:
eslint . -f checkstyle > checkstyle-report.xml
Форматтер применяется уже после завершения анализа и не влияет на сам процесс линтинга.
Каждое сообщение о проблеме имеет стандартную форму:
ruleId — идентификатор правилаseverity — уровень (1 предупреждение, 2 ошибка)message — текст ошибкиline, column — позицияendLine, endColumn — конец диапазона (если
применимо)fix — объект автоправки (если доступен)filePath — путь к файлуФорматтер работает с массивом таких сообщений, сгруппированных по файлам.
Наиболее используемый форматтер, применяемый по умолчанию. Выводит ошибки построчно с группировкой по файлам:
Особенность заключается в визуальной структуре: файл, затем список нарушений с выравниванием и указанием позиции.
Минималистичный формат вывода, предназначенный для быстрого просмотра:
file.js: line 10, col 5, Error - Unexpected console statement.
Используется там, где важна краткость, например в логах или ограниченных терминальных интерфейсах.
Формат, совместимый с Unix-утилитами. Каждая ошибка выводится в виде строки:
file.js:10:5: Unexpected console statement
Подходит для интеграции с grep, awk и
другими инструментами обработки текста.
Выводит результаты в табличной форме. Каждая строка соответствует нарушению, а колонки фиксируют файл, позицию, правило и сообщение.
Используется для анализа больших отчётов, когда важна структурированность данных.
Возвращает полный структурированный JSON-объект. Используется для:
Пример структуры:
[
{
"filePath": "file.js",
"messages": [
{
"ruleId": "no-console",
"severity": 2,
"message": "Unexpected console statement",
"line": 10,
"column": 5
}
],
"errorCount": 1,
"warningCount": 0
}
]
Расширенная версия JSON-формата. Помимо результатов содержит:
Применяется в сложных CI/CD пайплайнах и системах аналитики.
XML-формат, совместимый с инструментами непрерывной интеграции (например, Jenkins). Структура соответствует стандарту Checkstyle:
<checkstyle>
<file name="file.js">
<error line="10" column="5" severity="error" message="Unexpected console statement"/>
</file>
</checkstyle>
Используется в корпоративных окружениях, где требуется унифицированный формат отчётности.
Формат XML, совместимый с тестовыми фреймворками. ESLint рассматривается как набор тестов качества кода, а нарушения — как проваленные тесты.
Применяется в CI для отображения результатов линтинга в интерфейсах тест-раннеров.
Формат Test Anything Protocol. Каждое нарушение представляется как тестовый кейс:
not ok 1 - Unexpected console statement in file.js:10:5
Используется в Node.js экосистеме и тестовых пайплайнах.
Генерирует HTML-отчёт с навигацией по файлам и подсветкой ошибок. Обычно используется для публикации результатов анализа в виде статического отчёта.
Особенности:
Формат, совместимый с интеграцией Visual Studio. Вывод адаптирован под отображение в списке ошибок IDE.
Используется в средах, где ESLint интегрируется как внешний анализатор кода.
Формат, ориентированный на отображение контекста ошибки. Помимо сообщения выводится фрагмент исходного кода с указанием проблемной строки.
Пример поведения:
Процесс выглядит следующим образом:
Форматтер не участвует в логике анализа и не может изменять результаты.
Если указать несуществующий форматтер, ESLint завершает выполнение с ошибкой. Это важно при автоматизации, где имя форматтера передаётся через переменные окружения.
Форматтер представляет собой модуль, экспортирующий функцию:
export default function (results) {
return results.map(r => r.filePath).join('\n');
}
Функция получает массив results, где каждый элемент
содержит:
filePathmessageserrorCountwarningCountfixableErrorCountfixableWarningCountРезультатом должна быть строка (или структура, если используется JSON-форматирование).
eslint . -f ./my-formatter.js
или через пакет:
eslint . -f eslint-formatter-custom
Форматтеры строятся вокруг нескольких ключевых принципов:
При необходимости сложной логики (например, агрегации статистики) она реализуется внутри форматтера, но не влияет на исходные данные линтера.
При анализе крупных кодовых баз форматтеры становятся частью инфраструктуры качества:
Разделение форматов позволяет использовать один и тот же результат анализа в разных контекстах без изменения конфигурации ESLint.