function parameter_info_from_decorated_expression()

in src/consumers/parameter_info_from_decorated_expression.hack [14:45]


function parameter_info_from_decorated_expression(
  HHAST\DecoratedExpression $de,
): shape('name' => HHAST\VariableToken, 'variadic' => bool) {
  $inner = $de->getExpression();
  if ($inner is HHAST\DecoratedExpression) {
    $ret = parameter_info_from_decorated_expression($inner);
  } else {
    invariant(
      $inner is HHAST\VariableToken,
      "Don't know how to handle %s ('%s')",
      \get_class($inner),
      $inner->getCode() ?? '',
    );
    $ret = shape(
      'name' => $inner,
      'variadic' => false,
    );
  }

  $d = $de->getDecorator();
  if ($d is HHAST\DotDotDotToken) {
    $ret['variadic'] = true;
  } else {
    invariant_violation(
      "Unhandled decorator: %s ('%s')",
      \get_class($d),
      $de->getCode(),
    );
  }

  return $ret;
}