UNPKG

@code-pushup/eslint-plugin

Version:

Code PushUp plugin for detecting problems in source code using ESLint.📋

68 lines • 2.53 kB
import { formatIssueSeverities, logger, truncateIssueMessage, } from '@code-pushup/utils'; import { ruleIdToSlug } from '../meta/list.js'; export function mergeLinterOutputs(outputs) { return outputs.reduce((acc, { results, ruleOptionsPerFile }) => ({ results: [...acc.results, ...results], ruleOptionsPerFile: { ...acc.ruleOptionsPerFile, ...ruleOptionsPerFile }, }), { results: [], ruleOptionsPerFile: {} }); } export function lintResultsToAudits({ results, ruleOptionsPerFile, }) { const issuesPerAudit = results .flatMap(({ messages, filePath }) => messages.map((message) => ({ ...message, filePath }))) .reduce((acc, issue) => { const { ruleId, message, filePath } = issue; if (!ruleId) { logger.warn(`ESLint core error - ${message} (file: ${filePath})`); return acc; } const options = ruleOptionsPerFile[filePath]?.[ruleId] ?? []; const auditSlug = ruleIdToSlug(ruleId, options); return { ...acc, [auditSlug]: [...(acc[auditSlug] ?? []), issue] }; }, {}); return Object.entries(issuesPerAudit).map(entry => toAudit(...entry)); } function toAudit(slug, issues) { const auditIssues = issues.map(convertIssue); return { slug, score: Number(auditIssues.length === 0), value: auditIssues.length, displayValue: formatIssueSeverities(auditIssues), details: { issues: auditIssues, }, }; } function convertIssue(issue) { return { message: truncateIssueMessage(issue.message), severity: convertSeverity(issue.severity), source: { file: issue.filePath, ...(issue.line > 0 && { position: { startLine: issue.line, ...(issue.column > 0 && { startColumn: issue.column }), ...(issue.endLine && issue.endLine > 0 && { endLine: issue.endLine, }), ...(issue.endColumn && issue.endColumn > 0 && { endColumn: issue.endColumn }), }, }), }, }; } function convertSeverity(severity) { switch (severity) { case 2: return 'error'; case 1: return 'warning'; case 0: // shouldn't happen throw new Error(`Unexpected severity ${severity} in ESLint results`); } } //# sourceMappingURL=transform.js.map