@maniascript/api
Version:
Maniascript API generator
68 lines (67 loc) • 2.04 kB
JavaScript
class DocVisitor {
newLineCount = 0;
visitDescription(ctx) {
if (ctx === null)
return undefined;
const trimmedDescription = ctx.getText().trim();
return trimmedDescription !== '' ? trimmedDescription : undefined;
}
visitLineBrief(doc, ctx) {
if (ctx === null)
return;
const description = this.visitDescription(ctx.brief().description());
if (description !== undefined) {
if (doc.brief === undefined) {
doc.brief = description;
}
else {
doc.brief += `\n${description}`;
}
}
}
visitLineParam(doc, ctx) {
if (ctx === null)
return;
if (doc.params === undefined) {
doc.params = [];
}
doc.params.push({
name: ctx.param()._paramName?.text ?? '',
description: this.visitDescription(ctx.param().description())
});
}
visitLineDescription(doc, ctx) {
if (ctx === null)
return;
const description = this.visitDescription(ctx.description());
if (description !== undefined) {
if (doc.description === undefined) {
doc.description = description;
}
else if (this.newLineCount >= 2) {
doc.description += `\n${description}`;
}
else {
doc.description += ` ${description}`;
}
}
this.newLineCount = 0;
}
visitLine(doc, ctx) {
this.visitLineBrief(doc, ctx.lineBrief());
this.visitLineParam(doc, ctx.lineParam());
this.visitLineDescription(doc, ctx.lineDescription());
this.newLineCount += 1;
}
visit(ctx) {
const doc = {};
const lines = ctx.content()?.line();
if (lines !== undefined) {
for (const line of lines) {
this.visitLine(doc, line);
}
}
return doc;
}
}
export { DocVisitor };