in src/renderer.ts [379:416]
private attachLeadingTrivia(node: ts.Node, transformed: OTree): OTree {
// Add comments and leading whitespace
const leadingRanges = scanText(this.sourceFile.text, node.getFullStart(), node.getStart(this.sourceFile));
const precede: OTree[] = [];
for (const range of leadingRanges) {
let trivia: OTree | undefined = undefined;
switch (range.type) {
case 'other':
trivia = new OTree([repeatNewlines(this.sourceFile.text.substring(range.pos, range.end))], [], {
renderOnce: `ws-${range.pos}`,
});
break;
case 'linecomment':
case 'blockcomment':
trivia = this.handler.commentRange(
commentSyntaxFromCommentRange(commentRangeFromTextRange(range), this),
this,
);
break;
case 'directive':
break;
}
if (trivia != null) {
// Set spans on comments to make sure their visibility is toggled correctly.
trivia.setSpan(range.pos, range.end);
precede.push(trivia);
}
}
// FIXME: No trailing comments for now, they're too tricky
if (precede.length > 0 && !transformed.isEmpty) {
return new OTree([...precede, transformed], [], { canBreakLine: true });
}
return transformed;
}