function stringify_functionish_signature()

in src/PageSections/_Private/stringify_functionish_signature.hack [18:65]


function stringify_functionish_signature(
  StringifyFormat $format,
  ScannedFunctionish $function,
  ?DocBlock $docs,
): string {
  $ret = '';
  $ns = $function->getNamespaceName();
  if ($format === StringifyFormat::MULTI_LINE && $ns !== '') {
    $ret .= 'namespace '.$ns.";\n\n";
    $name = $function->getShortName();
  } else {
    $name = $function->getName();
  }

  if ($function is ScannedMethod) {
    if ($function->isAbstract()) {
      $ret .= 'abstract ';
    }

    if ($function->isFinal()) {
      $ret .= 'final ';
    }

    if ($function->isPublic()) {
      $ret .= 'public ';
    } else if ($function->isPrivate()) {
      $ret .= 'private ';
    } else if ($function->isProtected()) {
      $ret .= 'protected ';
    }

    if ($function->isStatic()) {
      $ret .= 'static ';
    }
  }

  $ret .= 'function '.$name;
  $ret .= stringify_generics($ns, $function->getGenericTypes());
  $ret .= stringify_parameters($ns, $format, $function, $docs);

  $type = $function->getReturnType();
  if ($type) {
    $ret .= ': '.stringify_typehint($ns, $type);
  }

  $ret .= ';';
  return $ret;
}