in src/CodegenFile.hack [386:458]
private function getContent(): string {
$builder = (new HackBuilder($this->config));
$builder->addLineIff(
$this->fileNamespace !== null,
'namespace %s;',
$this->fileNamespace ?? '',
);
$get_use_statement = (string $type, string $ns, ?string $as) ==>
\sprintf('use %s %s%s;', $type, $ns, $as === null ? '' : ' as '.$as);
foreach ($this->useNamespaces as $ns => $as) {
$builder->addLine($get_use_statement('namespace', $ns, $as));
}
foreach ($this->useTypes as $ns => $as) {
$builder->addLine($get_use_statement('type', $ns, $as));
}
foreach ($this->useFunctions as $ns => $as) {
$builder->addLine($get_use_statement('function', $ns, $as));
}
foreach ($this->useConsts as $ns => $as) {
$builder->addLine($get_use_statement('const', $ns, $as));
}
$header = $this->pseudoMainHeader;
if ($header !== null) {
invariant(
$this->fileType !== CodegenFileType::HACK_STRICT,
'Pseudomains (and pseudomain headers) are not supported in strict files'
);
$builder->ensureNewLine()->add($header)->ensureNewLine();
}
foreach ($this->beforeTypes as $type) {
$builder->ensureNewLine()->newLine();
$builder->add($type->render());
}
foreach ($this->consts as $const) {
$builder->ensureEmptyLine()->add($const->render());
}
foreach ($this->enums as $enum) {
$builder->ensureNewLine()->newLine();
$builder->add($enum->render());
}
foreach ($this->functions as $function) {
$builder->ensureNewLine()->newLine();
$builder->add($function->render());
}
foreach ($this->classes as $class) {
$builder->ensureNewLine()->newLine();
$builder->add($class->render());
}
foreach ($this->traits as $trait) {
$builder->ensureNewLine()->newLine();
$builder->add($trait->render());
}
foreach ($this->afterTypes as $type) {
$builder->ensureNewLine()->newLine();
$builder->add($type->render());
}
$footer = $this->pseudoMainFooter;
if ($footer !== null) {
invariant(
$this->fileType !== CodegenFileType::HACK_STRICT,
'Pseudomains (and pseudomain footers) are not supported in strict files'
);
$builder->ensureEmptyLine()->add($footer)->ensureNewLine();
}
return $builder->getCode();
}