function get_path_for_documentable()

in src/get_path_for_documentable.hack [22:59]


function get_path_for_documentable(
  IPathProvider<?string> $provider,
  Documentable $what,
): ?string {
  $def = $what['definition'];
  if ($def is ScannedClass) {
    return $provider->getPathForClass($def->getName());
  }
  if ($def is ScannedInterface) {
    return $provider->getPathForInterface($def->getName());
  }
  if ($def is ScannedTrait) {
    return $provider->getPathForTrait($def->getName());
  }
  if ($def is ScannedFunction) {
    return $provider->getPathForFunction($def->getName());
  }
  if ($def is ScannedType) {
    return $provider->getPathForTransparentTypeAlias($def->getName());
  }
  if ($def is ScannedNewtype) {
    return $provider->getPathForOpaqueTypeAlias($def->getName());
  }
  if ($def is ScannedMethod) {
    $p = $what['parent'];
    if ($p is ScannedClass) {
      return $provider->getPathForClassMethod($p->getName(), $def->getName());
    }
    if ($p is ScannedInterface) {
      return
        $provider->getPathForInterfaceMethod($p->getName(), $def->getName());
    }
    if ($p is ScannedTrait) {
      return $provider->getPathForTraitMethod($p->getName(), $def->getName());
    }
  }
  invariant_violation('Failed to find path for %s', \get_class($def));
}