UNPKG

@sasjs/lint

Version:

Linting and formatting for SAS code

74 lines 3.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.lineEndings = void 0; const LineEndings_1 = require("../../types/LineEndings"); const LintRuleType_1 = require("../../types/LintRuleType"); const Severity_1 = require("../../types/Severity"); const name = 'lineEndings'; const description = 'Ensures line endings conform to the configured type.'; const message = 'Incorrect line ending - {actual} instead of {expected}'; const test = (value, config) => { const lineEndingConfig = (config === null || config === void 0 ? void 0 : config.lineEndings) || LineEndings_1.LineEndings.LF; const expectedLineEnding = lineEndingConfig === LineEndings_1.LineEndings.LF ? '{lf}' : '{crlf}'; const incorrectLineEnding = expectedLineEnding === '{lf}' ? '{crlf}' : '{lf}'; const lines = value .replace(/\r\n/g, '{crlf}') .replace(/\n/g, '{lf}') .split(new RegExp(`(?<=${expectedLineEnding})`)); const diagnostics = []; const severity = (config === null || config === void 0 ? void 0 : config.severityLevel[name]) || Severity_1.Severity.Warning; let indexOffset = 0; lines.forEach((line, index) => { if (line.endsWith(incorrectLineEnding)) { diagnostics.push({ message: message .replace('{expected}', expectedLineEnding === '{lf}' ? 'LF' : 'CRLF') .replace('{actual}', incorrectLineEnding === '{lf}' ? 'LF' : 'CRLF'), lineNumber: index + 1 + indexOffset, startColumnNumber: line.indexOf(incorrectLineEnding), endColumnNumber: line.indexOf(incorrectLineEnding) + 1, severity }); } else { const splitLine = line.split(new RegExp(`(?<=${incorrectLineEnding})`)); if (splitLine.length > 1) { indexOffset += splitLine.length - 1; } splitLine.forEach((l, i) => { if (l.endsWith(incorrectLineEnding)) { diagnostics.push({ message: message .replace('{expected}', expectedLineEnding === '{lf}' ? 'LF' : 'CRLF') .replace('{actual}', incorrectLineEnding === '{lf}' ? 'LF' : 'CRLF'), lineNumber: index + i + 1, startColumnNumber: l.indexOf(incorrectLineEnding), endColumnNumber: l.indexOf(incorrectLineEnding) + 1, severity }); } }); } }); return diagnostics; }; const fix = (value, config) => { const lineEndingConfig = (config === null || config === void 0 ? void 0 : config.lineEndings) || LineEndings_1.LineEndings.LF; return value .replace(/\r\n/g, '{crlf}') .replace(/\n/g, '{lf}') .replace(/{crlf}/g, lineEndingConfig === LineEndings_1.LineEndings.LF ? '\n' : '\r\n') .replace(/{lf}/g, lineEndingConfig === LineEndings_1.LineEndings.LF ? '\n' : '\r\n'); }; /** * Lint rule that checks if line endings in a file match the configured type. */ exports.lineEndings = { type: LintRuleType_1.LintRuleType.File, name, description, message, test, fix }; //# sourceMappingURL=lineEndings.js.map