function getLeadingBlockComment(node) {
  // Example code: /** @summary blah */ /** @export */ foo.bar = ...;
  // Example node: {
  //   type: 'ExpressionStatement',
  //   expression: { ... },
  //   leadingComments: [
  //     { type: 'Block', value: '* @summary blah ' },
  //     { type: 'Block', value: '* @export ' },
  //   ],
  // }
  if (!node.leadingComments || !node.leadingComments.length) {
    return null;
  }

  // Ignore non-block comments, since those are not jsdoc/Closure comments.
  const blockComments = node.leadingComments.filter((comment) => {
    return comment.type == 'Block';
  });
  if (!blockComments.length) {
    return null;
  }

  // In case there are multiple (for example, a file-level comment that also
  // precedes the node), take the most recent one, which is closest to the node.
  const mostRecentComment = blockComments[blockComments.length - 1];

  // Reconstruct the original block comment by adding back /* and */.
  return '/*' + mostRecentComment.value + '*/';
}
@param {ASTNode} node A node from the abstract syntax tree.
@return {string} A reconstructed leading comment block for the node.
  If there are multiple comments before this node, we will take the most
  recent block comment, as that is the one that would contain any applicable
  jsdoc/closure annotations for this symbol.