UNPKG

@fimbul/wotan

Version:

Pluggable TypeScript and JavaScript linter

44 lines 2.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createBaseline = exports.isCodeLine = void 0; const ymir_1 = require("@fimbul/ymir"); function isCodeLine(line) { return !/^ *~(~*|nil)( +\[.+\])?$/.test(line); } exports.isCodeLine = isCodeLine; function createBaseline(summary) { if (summary.findings.length === 0) return summary.content; const findings = summary.findings.slice().sort(ymir_1.Finding.compare); const lines = []; let lineStart = 0; let findingPosition = 0; let pendingFindings = []; for (const line of summary.content.split(/\n/g)) { lines.push(line); const nextLineStart = lineStart + line.length + 1; const lineLength = line.length - (line.endsWith('\r') ? 1 : 0); const pending = []; for (const finding of pendingFindings) lines.push(formatFinding(finding, lineStart, lineLength, nextLineStart, pending)); pendingFindings = pending; for (; findingPosition < findings.length && findings[findingPosition].start.position < nextLineStart; ++findingPosition) lines.push(formatFinding(findings[findingPosition], lineStart, lineLength, nextLineStart, pendingFindings)); lineStart = nextLineStart; } return lines.join('\n'); } exports.createBaseline = createBaseline; function formatFinding(finding, lineStart, lineLength, nextLineStart, remaining) { const lineEnd = lineStart + lineLength; const findingStart = Math.max(finding.start.position, lineStart); let errorLine = ' '.repeat(findingStart - lineStart); const findingLength = Math.min(lineEnd, finding.end.position) - findingStart; errorLine += findingLength === 0 ? '~nil' : '~'.repeat(findingLength); if (finding.end.position <= nextLineStart) return errorLine + ' '.repeat(Math.max(1, lineLength - errorLine.length + 1)) + `[${finding.severity} ${finding.ruleName}: ${finding.message.replace(/[\r\n]/g, '\\$&')}]`; remaining.push(finding); return errorLine; } //# sourceMappingURL=baseline.js.map