in src/builders/FactParseScanner.hack [25:70]
private static function untypedToShape(mixed $data): self::TFacts {
invariant(
$data is KeyedTraversable<_, _>,
'FactsParse did not give us an array',
);
$out = darray[];
foreach ($data as $file => $facts) {
invariant($file is string, 'FactsParse data is not string-keyed');
invariant(
$facts is KeyedContainer<_, _>,
'FactsParse data for file "%s" is not a KeyedContainer',
$file,
);
try {
$out[$file] = shape(
'types' => TypeAssert\is_array_of_shapes_with_name_field(
$facts['types'] ?? null,
'FactParse types',
),
'constants' => TypeAssert\is_array_of_strings(
$facts['constants'] ?? null,
'FactParse constants',
),
'functions' => TypeAssert\is_array_of_strings(
$facts['functions'] ?? null,
'FactParse functions',
),
'typeAliases' => TypeAssert\is_array_of_strings(
$facts['typeAliases'] ?? null,
'FactParse typeAliases',
),
);
} catch (\Exception $e) {
$error_level = \error_reporting(0);
$file_is_empty = \filesize($file) === 0;
\error_reporting($error_level);
if ($file_is_empty) {
continue;
}
throw new \Exception("Failed to parse '".$file.'"', $e->getCode(), $e);
}
}
return $out;
}