private async function writeFailureDetailsAsync()

in src/_Private/VerboseCLIOutput.hack [76:114]


  private async function writeFailureDetailsAsync(
    <<__AcceptDisposable>> IO\WriteHandle $handle,
  ): Awaitable<void> {
    $error_id = 0;
    foreach ($this->getErrors() as $event) {
      $ex = $event->getException();
      $error_id++;
      $header = $this->getMessageHeaderForErrorDetails($error_id, $event);

      if ($event is HackTest\TestSkippedProgressEvent) {
        await $handle->writeAllAsync($header.'Skipped: '.$ex->getMessage());
        return;
      }

      $it = $ex;
      $message = '';
      while ($it) {
        $message .= Str\format(
          "%s\n\n@ %s(%d)\n%s",
          $it->getMessage(),
          $it->getFile(),
          $it->getLine(),
          $it->getTraceAsString(),
        );
        $it = $it->getPrevious();
        if ($it !== null) {
          $message .= "\n\nPrevious exception:\n\n";
        }
      }
      if ($event is HackTest\FileProgressEvent) {
        $file = $event->getPath();
        $context = $this->getPrettyContext($ex, $file);
        if ($context is nonnull) {
          $message .= "\n\n".$context;
        }
      }
      await $handle->writeAllAsync($header.$message);
    }
  }