ecmarkup
Version:
Custom element definitions and core utilities for markup that specifies ECMAScript and related technologies.
75 lines (74 loc) • 2.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.printHeader = printHeader;
const header_parser_1 = require("../header-parser");
const line_builder_1 = require("./line-builder");
function printTypedParam(param, optional) {
var _a;
let p = (optional ? 'optional ' : '') + param.name + ': ' + ((_a = param.type) !== null && _a !== void 0 ? _a : 'unknown') + ',';
if (param.wrappingTag) {
p = `<${param.wrappingTag}>${p}</${param.wrappingTag}>`;
}
return p;
}
function ensureUnderscores(param) {
if (!/^[a-zA-Z0-9]+$/.test(param.name)) {
return param;
}
return {
...param,
name: '_' + param.name + '_',
};
}
function printHeader(parseResult, clauseType, indent) {
/* eslint-disable prefer-const */
let { type, wrappingTag, prefix, name, params, optionalParams, returnType,
// errors is already handled
} = parseResult;
/* eslint-enable prefer-const */
const multiline = type === 'multi-line' && (params.length > 0 || optionalParams.length > 0);
const result = new line_builder_1.LineBuilder(indent);
if (multiline) {
result.firstLineIsPartial = false;
}
if (wrappingTag !== null) {
result.appendText(`<${wrappingTag}>`);
}
if (prefix !== null) {
result.appendText(prefix + ' ');
}
result.appendText(name);
params = params.map(ensureUnderscores);
optionalParams = optionalParams.map(ensureUnderscores);
if (clauseType === 'sdo' &&
params.length === 0 &&
optionalParams.length === 0 &&
returnType === null) {
// do not print a parameter list
}
else if (!multiline) {
result.appendText(' ' + (0, header_parser_1.printSimpleParamList)(params, optionalParams));
}
else {
result.appendText(' (');
++result.indent;
for (const param of params) {
result.appendLine(printTypedParam(param, false));
}
for (const param of optionalParams) {
result.appendLine(printTypedParam(param, true));
}
--result.indent;
result.appendText(')');
}
if (returnType !== null && returnType !== '') {
result.appendText(': ' + returnType);
}
if (wrappingTag !== null) {
result.appendText(`</${wrappingTag}>`);
}
if (multiline) {
result.linebreak();
}
return result;
}