Форматтеры в ESLint определяют способ представления результатов
статического анализа кода. Они преобразуют внутреннюю структуру отчёта
линтера в конкретный формат вывода, пригодный для чтения человеком или
для обработки внешними системами. Среди машинно-ориентированных
форматтеров особое значение имеют json и
json-with-metadata, поскольку они формируют
структурированные данные, пригодные для CI/CD, аналитики и
автоматизированной обработки.
ESLint после анализа файлов формирует единый объект отчёта, содержащий:
Форматтеры json и json-with-metadata
сериализуют этот отчёт в JSON-структуру, сохраняя его пригодность для
программного потребления без потери семантики.
Форматтер json формирует массив объектов, где каждый
объект соответствует одному проанализированному файлу.
[
{
"filePath": "src/index.js",
"messages": [],
"errorCount": 0,
"warningCount": 0,
"fixableErrorCount": 0,
"fixableWarningCount": 0,
"source": "console.log('test')\n"
}
]
filePath Путь к анализируемому файлу. Используется для сопоставления результатов с исходной кодовой базой.
messages Массив найденных нарушений правил ESLint.
errorCount / warningCount Количество ошибок и предупреждений соответственно.
fixableErrorCount / fixableWarningCount Число
проблем, которые могут быть автоматически исправлены через
--fix.
source Исходный код файла (опционально, зависит от конфигурации ESLint).
Каждое сообщение о проблеме представляет собой объект со следующими полями:
{
"ruleId": "no-console",
"severity": 2,
"message": "Unexpected console statement.",
"line": 1,
"column": 1,
"endLine": 1,
"endColumn": 13,
"nodeType": "MemberExpression"
}
ruleId Идентификатор правила, вызвавшего нарушение.
Может быть null, если ошибка не связана с конкретным
правилом.
severity Уровень критичности:
1 — предупреждение (warning)2 — ошибка (error)message Текст диагностического сообщения.
line / column Начальная позиция проблемы в коде.
endLine / endColumn Конечная позиция диапазона, если применимо.
nodeType Тип AST-узла, к которому относится нарушение.
В CLI ESLint форматтер задаётся параметром -f или
--format:
eslint -f json src/
Вывод можно перенаправить в файл:
eslint -f json src/ > report.json
Это делает форматтер удобным для интеграции с системами:
Форматтер json-with-metadata расширяет базовый
JSON-вывод, добавляя глобальные метаданные выполнения ESLint.
{
"metadata": {
"rulesMeta": {},
"eslintVersion": "8.57.0"
},
"results": [
{
"filePath": "src/index.js",
"messages": [],
"errorCount": 0,
"warningCount": 0,
"source": "console.log('test')\n"
}
]
}
Содержит версию ESLint, которая использовалась при анализе. Это критично для:
Объект, содержащий метаданные правил, участвовавших в анализе.
Каждое правило может включать:
Пример:
{
"no-console": {
"docs": {
"description": "disallow the use of console",
"category": "Possible Errors",
"recommended": true
},
"schema": []
}
}
Поле results в json-with-metadata
аналогично массиву из json, но находится внутри общего
объекта. Каждый элемент содержит ту же структуру, что и в стандартном
JSON-форматтере:
json — массив результатов;json-with-metadata — объект с двумя ключами:
metadata и results.json не содержит сведений о:
json-with-metadata включает эти данные, делая отчёт
самодостаточным.
Используется в сценариях, где важна компактность:
Применяется там, где требуется контекст выполнения:
JSON-формат ESLint позволяет легко интегрироваться с инструментами обработки данных.
Типичный сценарий обработки включает:
Пример логической структуры анализа:
При генерации JSON ESLint придерживается строгой структуры:
Несмотря на универсальность JSON-формата, существуют особенности:
JSON-форматтеры ESLint часто используются в связке с:
Структурированность данных позволяет строить поверх ESLint полноценные системы наблюдения за качеством кодовой базы.