private function getInitCode()

in src/RouterCLILookupCodegenBuilder.hack [169:215]


  private function getInitCode(): string {
    $autoloader_dirs = ImmSet {
      '/',
      '/vendor/',
      '/../vendor/',
      '/../',
    };
    $autoloader_files = ImmSet {
      'autoload.hack',
    };
    $full_autoloader_files = Set { };
    foreach ($autoloader_files as $file) {
      foreach ($autoloader_dirs as $dir) {
        $full_autoloader_files[] = \sprintf(
          '__DIR__.%s',
          \var_export($dir.$file, true),
        );
      }
    }

    return $this->cg->codegenHackBuilder()
      ->startManualSection('init')
      ->addAssignment(
        '$autoloader',
        'null',
        HackBuilderValues::literal(),
      )
      ->addAssignment(
        '$autoloader_candidates',
        $full_autoloader_files->immutable(),
        HackBuilderValues::immSet(HackBuilderValues::literal()),
      )
      ->startForeachLoop('$autoloader_candidates', null, '$candidate')
      ->startIfBlock('\\file_exists($candidate)')
      ->addAssignment('$autoloader', '$candidate', HackBuilderValues::literal())
      ->addLine('break;')
      ->endIfBlock()
      ->endForeachLoop()
      ->startIfBlock('$autoloader === null')
      ->addLine('\\fwrite(\\STDERR, "Can\'t find autoloader.\n");')
      ->addLine('exit(1);')
      ->endIfBlock()
      ->addLine('require_once($autoloader);')
      ->addLine('\\Facebook\\AutoloadMap\\initialize();')
      ->endManualSection()
      ->getCode();
  }