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