private function getMainMethod()

in src/RouterCLILookupCodegenBuilder.hack [217:251]


  private function getMainMethod(): CodegenMethod {
    return $this->cg->codegenMethod('main')
      ->addParameter('KeyedContainer<int, string> $argv')
      ->setReturnType('void')
      ->setBody(
        $this->cg->codegenHackBuilder()
          ->addAssignment(
            '$path',
            '$argv[1] ?? null',
            HackBuilderValues::literal(),
          )
          ->startIfBlock('$path === null')
          ->addLine('\\fprintf(\\STDERR, "Usage: %s PATH\n", $argv[0]);')
          ->addLine('exit(1);')
          ->endIfBlock()
          ->addAssignment(
            '$controllers',
            '$this->getControllersForPath($path)',
            HackBuilderValues::literal(),
          )
          ->startIfBlock('$controllers->isEmpty()')
          ->addLine('\\printf("No controller found for \'%s\'.\n", $path);')
          ->addLine('exit(1);')
          ->endIfBlock()
          ->startForeachLoop('$controllers', '$method', '$controller')
          ->addAssignment(
            '$pretty',
            '$this->prettifyControllerName($controller)',
            HackBuilderValues::literal(),
          )
          ->addLine('\\printf("%-8s %s\n", $method.\':\', $pretty);')
          ->endForeachLoop()
          ->getCode()
      );
  }