@sasjs/lint
Version:
Linting and formatting for SAS code
51 lines • 2.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.hasMacroParentheses = 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 name = 'hasMacroParentheses';
const description = 'Enforces the presence of parentheses in macro definitions.';
const message = 'Macro definition missing parentheses';
const test = (value, config) => {
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.forEach((macro) => {
if (!macro.name) {
diagnostics.push({
message: 'Macro definition missing name',
lineNumber: macro.startLineNumbers[0],
startColumnNumber: (0, getColumnNumber_1.getColumnNumber)(macro.declarationLines[0], '%macro'),
endColumnNumber: (0, getColumnNumber_1.getColumnNumber)(macro.declarationLines[0], '%macro') +
macro.declaration.length,
severity
});
}
else if (!macro.declarationLines.find((dl) => dl.includes('('))) {
const macroNameLineIndex = macro.declarationLines.findIndex((dl) => dl.includes(macro.name));
diagnostics.push({
message,
lineNumber: macro.startLineNumbers[macroNameLineIndex],
startColumnNumber: (0, getColumnNumber_1.getColumnNumber)(macro.declarationLines[macroNameLineIndex], macro.name),
endColumnNumber: (0, getColumnNumber_1.getColumnNumber)(macro.declarationLines[macroNameLineIndex], macro.name) +
macro.name.length -
1,
severity
});
}
});
return diagnostics;
};
/**
* Lint rule that enforces the presence of parentheses in macro definitions..
*/
exports.hasMacroParentheses = {
type: LintRuleType_1.LintRuleType.File,
name,
description,
message,
test
};
//# sourceMappingURL=hasMacroParentheses.js.map