@fimbul/wotan
Version:
Pluggable TypeScript and JavaScript linter
44 lines • 2.09 kB
JavaScript
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
;