UNPKG

@sasjs/lint

Version:

Linting and formatting for SAS code

45 lines 1.97 kB
"use strict"; 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