UNPKG

@sasjs/lint

Version:

Linting and formatting for SAS code

44 lines 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hasRequiredMacroOptions = void 0; const types_1 = require("../../types"); const LintRuleType_1 = require("../../types/LintRuleType"); const parseMacros_1 = require("../../utils/parseMacros"); const name = 'hasRequiredMacroOptions'; const description = 'Enforce required macro options'; const message = 'Macro defined without required options'; const processOptions = (macro, diagnostics, config) => { var _a, _b, _c; const optionsPresent = (_c = (_b = (_a = macro.declaration.split('/')) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.trim()) !== null && _c !== void 0 ? _c : ''; const severity = (config === null || config === void 0 ? void 0 : config.severityLevel[name]) || types_1.Severity.Warning; config === null || config === void 0 ? void 0 : config.requiredMacroOptions.forEach((option) => { if (!optionsPresent.includes(option)) { diagnostics.push({ message: `Macro '${macro.name}' does not contain the required option '${option}'`, lineNumber: macro.startLineNumbers[0], startColumnNumber: 0, endColumnNumber: 0, severity }); } }); }; const test = (value, config) => { const diagnostics = []; const macros = (0, parseMacros_1.parseMacros)(value, config); macros.forEach((macro) => { processOptions(macro, diagnostics, config); }); return diagnostics; }; /** * Lint rule that checks if a macro has the required options */ exports.hasRequiredMacroOptions = { type: LintRuleType_1.LintRuleType.File, name, description, message, test }; //# sourceMappingURL=hasRequiredMacroOptions.js.map