in src/consumers/parameters_from_ast.hack [14:60]
function parameters_from_ast(
ConsumerContext $context,
HHAST\FunctionDeclarationHeader $header,
): vec<ScannedParameter> {
$params = $header->getParameterList();
if ($params === null) {
return vec[];
}
// Doc comments are being attached as trailing on the preceding token
$next_doccomment = doccomment_from_ast(
$context['definitionContext'],
$header->getLeftParenx()->getTrailing(),
);
$out = vec[];
foreach ($params->getChildren() as $node) {
invariant($node is HHAST\ListItem<_>, 'Got non-listitem child');
$item = $node->getItem();
if ($item is HHAST\VariadicParameter) {
$out[] = new ScannedParameter(
$item,
'',
context_with_node_position($context, $item)['definitionContext'],
/* attributes = */ dict[],
/* doccomment = */ null,
typehint_from_ast($context, $item->getType()),
/* inout = */ false,
/* variadic = */ true,
/* default = */ null,
/* visibility = */ null,
);
continue;
}
invariant(
$item is HHAST\ParameterDeclaration,
"Got non-decl child: %s: %s\n%s",
\get_class($item),
$item->getCode(),
$header->getCode(),
);
$out[] = parameter_from_ast($context, $item, $next_doccomment);
$next_doccomment = doccomment_from_ast(
$context['definitionContext'],
$node->getSeparator()?->getTrailing(),
);
}
return $out;
}