@sasjs/lint
Version:
Linting and formatting for SAS code
74 lines • 3.33 kB
JavaScript
;
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