UNPKG

@sasjs/lint

Version:

Linting and formatting for SAS code

78 lines 3.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hasDoxygenHeader = void 0; const types_1 = require("../../types"); const LineEndings_1 = require("../../types/LineEndings"); const LintRuleType_1 = require("../../types/LintRuleType"); const Severity_1 = require("../../types/Severity"); const getLintConfig_1 = require("../../utils/getLintConfig"); const name = 'hasDoxygenHeader'; const description = 'Enforce the presence of a Doxygen header at the start of each file.'; const message = 'File missing Doxygen header'; const messageForSingleAsterisk = 'File not following Doxygen header style, use double asterisks'; const test = (value, config) => { var _a; const lineEnding = (config === null || config === void 0 ? void 0 : config.lineEndings) === LineEndings_1.LineEndings.CRLF ? '\r\n' : '\n'; const severity = (config === null || config === void 0 ? void 0 : config.severityLevel[name]) || Severity_1.Severity.Warning; try { const hasFileHeader = value.trimStart().startsWith('/**'); if (hasFileHeader) return []; const hasFileHeaderWithSingleAsterisk = value.trimStart().startsWith('/*'); if (hasFileHeaderWithSingleAsterisk) return [ { message: messageForSingleAsterisk, lineNumber: ((_a = value.split('/*')[0].match(new RegExp(lineEnding, 'g'))) !== null && _a !== void 0 ? _a : []) .length + 1, startColumnNumber: 1, endColumnNumber: 1, severity } ]; return [ { message, lineNumber: 1, startColumnNumber: 1, endColumnNumber: 1, severity } ]; } catch (e) { return [ { message, lineNumber: 1, startColumnNumber: 1, endColumnNumber: 1, severity } ]; } }; const fix = (value, config) => { const result = test(value, config); if (result.length === 0) { return value; } else if (result[0].message == messageForSingleAsterisk) return value.replace('/*', '/**'); config = config || new types_1.LintConfig(getLintConfig_1.DefaultLintConfiguration); const lineEndingConfig = (config === null || config === void 0 ? void 0 : config.lineEndings) || LineEndings_1.LineEndings.LF; const lineEnding = lineEndingConfig === LineEndings_1.LineEndings.LF ? '\n' : '\r\n'; return `${config === null || config === void 0 ? void 0 : config.defaultHeader.replace(/{lineEnding}/g, lineEnding)}${lineEnding}${value}`; }; /** * Lint rule that checks for the presence of a Doxygen header in a given file. */ exports.hasDoxygenHeader = { type: LintRuleType_1.LintRuleType.File, name, description, message, test, fix }; //# sourceMappingURL=hasDoxygenHeader.js.map