@code-pushup/eslint-plugin
Version:
Code PushUp plugin for detecting problems in source code using ESLint.📋
68 lines • 2.53 kB
JavaScript
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