public override functionDeclaration()

in src/languages/go.ts [125:157]


  public override functionDeclaration(node: ts.FunctionDeclaration, renderer: GoRenderer): OTree {
    const funcName = renderer.updateContext({ isExported: isExported(node) }).convert(node.name);
    const returnType = determineReturnType(renderer.typeChecker, node);
    const goType = this.renderType(node.type ?? node, returnType?.symbol, returnType, true, '', renderer);

    const body = node.body?.statements ? renderer.convertAll(node.body.statements) : [];
    return new OTree(
      [
        'func ',
        funcName,
        '(',
        new OTree([], renderer.updateContext({ isPtr: true }).convertAll(node.parameters), {
          separator: ', ',
        }),
        ')',
        goType ? ' ' : '',
        goType,
      ],
      [
        new OTree(
          [' {'],
          [this.defaultArgValues(node.parameters, renderer.updateContext({ wrapPtr: true })), ...body],
          {
            indent: 1,
            suffix: '\n}',
          },
        ),
      ],
      {
        canBreakLine: true,
      },
    );
  }