UNPKG

@sasjs/lint

Version:

Linting and formatting for SAS code

51 lines 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.charFromHex = exports.noGremlins = void 0; const LintRuleType_1 = require("../../types/LintRuleType"); const Severity_1 = require("../../types/Severity"); const utils_1 = require("../../utils"); const name = 'noGremlins'; const description = 'Disallow characters specified in gremlins array'; const message = 'Line contains a gremlin'; const test = (value, lineNumber, config) => { const severity = (config === null || config === void 0 ? void 0 : config.severityLevel[name]) || Severity_1.Severity.Warning; const allowedGremlins = (config === null || config === void 0 ? void 0 : config.allowedGremlins) || []; const diagnostics = []; const gremlins = {}; for (const [hexCode, gremlinConfig] of Object.entries(utils_1.gremlinCharacters)) { if (!allowedGremlins.includes(hexCode)) { gremlins[(0, exports.charFromHex)(hexCode)] = Object.assign({}, gremlinConfig, { hexCode }); } } const regexpWithAllChars = new RegExp(Object.keys(gremlins) .map((char) => `${char}+`) .join('|'), 'g'); let match; while ((match = regexpWithAllChars.exec(value))) { const matchedCharacter = match[0][0]; const gremlin = gremlins[matchedCharacter]; diagnostics.push({ message: `${message}: ${gremlin.description}, hexCode(${gremlin.hexCode})`, lineNumber, startColumnNumber: match.index + 1, endColumnNumber: match.index + 1 + match[0].length, severity }); } return diagnostics; }; /** * Lint rule that checks if a given line of text contains any gremlins. */ exports.noGremlins = { type: LintRuleType_1.LintRuleType.Line, name, description, message, test }; const charFromHex = (hexCode) => String.fromCodePoint(parseInt(hexCode)); exports.charFromHex = charFromHex; //# sourceMappingURL=noGremlins.js.map