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