private attachLeadingTrivia()

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;
  }