public async function displayHelpAsync()

in src/CLIBase.hack [342:399]


  public async function displayHelpAsync(
    IO\WriteHandle $out,
  ): Awaitable<void> {
    $usage = 'Usage: '.C\firstx($this->argv);

    $opts = $this->getSupportedOptions();
    if (C\is_empty($opts)) {
      $usage .= ' [-h|--help]';
    } else {
      $usage .= ' [OPTIONS]';
    }
    if ($this is CLIWithRequiredArguments) {
      $class =
        TypeAssert\classname_of(CLIWithRequiredArguments::class, static::class);
      $usage .= ' '.
        \implode(' ', $class::getHelpTextForRequiredArguments()).
        ' ['.
        $class::getHelpTextForOptionalArguments().
        ' ...]';
    } else if ($this is CLIWithArguments) {
      $class = TypeAssert\classname_of(CLIWithArguments::class, static::class);
      $usage .= ' ['.$class::getHelpTextForOptionalArguments().' ...]';
    }

    await $out->writeAllAsync($usage."\n");
    if (C\is_empty($opts)) {
      return;
    }

    await $out->writeAllAsync("\nOptions:\n");
    foreach ($opts as $opt) {
      $short = $opt->getShort();
      $long = $opt->getLong();
      if ($opt is CLIOptions\CLIOptionWithRequiredValue) {
        $long .= '=VALUE';
        if ($short !== null) {
          $short .= ' VALUE';
        }
      }

      if ($short !== null) {
        /* HHAST_IGNORE_ERROR[DontAwaitInALoop] */
        await $out->writeAllAsync(Str\format("  -%s, --%s\n", $short, $long));
      } else {
        /* HHAST_IGNORE_ERROR[DontAwaitInALoop] */
        await $out->writeAllAsync(Str\format("  --%s\n", $long));
      }
      /* HHAST_IGNORE_ERROR[DontAwaitInALoop] */
      await $out->writeAllAsync(
        $opt->getHelpText()
          |> Str\split($$, "\n")
          |> Vec\map($$, $line ==> "\t".$line."\n")
          |> \implode('', $$),
      );
    }
    await $out->writeAllAsync("  -h, --help\n");
    await $out->writeAllAsync("\tdisplay this text and exit\n");
  }