@sasjs/lint
Version:
Linting and formatting for SAS code
45 lines • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.noNestedMacros = void 0;
const LintRuleType_1 = require("../../types/LintRuleType");
const Severity_1 = require("../../types/Severity");
const getColumnNumber_1 = require("../../utils/getColumnNumber");
const parseMacros_1 = require("../../utils/parseMacros");
const LineEndings_1 = require("../../types/LineEndings");
const name = 'noNestedMacros';
const description = 'Enfoces the absence of nested macro definitions.';
const message = `Macro definition for '{macro}' present in macro '{parent}'`;
const test = (value, config) => {
const lineEnding = (config === null || config === void 0 ? void 0 : config.lineEndings) === LineEndings_1.LineEndings.CRLF ? '\r\n' : '\n';
const lines = value ? value.split(lineEnding) : [];
const diagnostics = [];
const macros = (0, parseMacros_1.parseMacros)(value, config);
const severity = (config === null || config === void 0 ? void 0 : config.severityLevel[name]) || Severity_1.Severity.Warning;
macros
.filter((m) => !!m.parentMacro)
.forEach((macro) => {
diagnostics.push({
message: message
.replace('{macro}', macro.name)
.replace('{parent}', macro.parentMacro),
lineNumber: macro.startLineNumbers[0],
startColumnNumber: (0, getColumnNumber_1.getColumnNumber)(lines[macro.startLineNumbers[0] - 1], '%macro'),
endColumnNumber: (0, getColumnNumber_1.getColumnNumber)(lines[macro.startLineNumbers[0] - 1], '%macro') +
lines[macro.startLineNumbers[0] - 1].trim().length -
1,
severity
});
});
return diagnostics;
};
/**
* Lint rule that checks for the absence of nested macro definitions.
*/
exports.noNestedMacros = {
type: LintRuleType_1.LintRuleType.File,
name,
description,
message,
test
};
//# sourceMappingURL=noNestedMacros.js.map