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