mirror of
https://github.com/barryvdh/ReflectionDocBlock.git
synced 2026-08-18 01:57:13 +00:00
Add support for rest argument notation
This commit is contained in:
@@ -127,7 +127,7 @@ final class Method extends BaseTag implements Factory\StaticMethod
|
|||||||
if ('' !== $arguments) {
|
if ('' !== $arguments) {
|
||||||
$arguments = explode(',', $arguments);
|
$arguments = explode(',', $arguments);
|
||||||
foreach($arguments as &$argument) {
|
foreach($arguments as &$argument) {
|
||||||
$argument = explode(' ', trim($argument));
|
$argument = explode(' ', self::stripRestArg(trim($argument)), 2);
|
||||||
if ($argument[0][0] === '$') {
|
if ($argument[0][0] === '$') {
|
||||||
$argumentName = substr($argument[0], 1);
|
$argumentName = substr($argument[0], 1);
|
||||||
$argumentType = new Void_();
|
$argumentType = new Void_();
|
||||||
@@ -135,6 +135,7 @@ final class Method extends BaseTag implements Factory\StaticMethod
|
|||||||
$argumentType = $typeResolver->resolve($argument[0], $context);
|
$argumentType = $typeResolver->resolve($argument[0], $context);
|
||||||
$argumentName = '';
|
$argumentName = '';
|
||||||
if (isset($argument[1])) {
|
if (isset($argument[1])) {
|
||||||
|
$argument[1] = self::stripRestArg($argument[1]);
|
||||||
$argumentName = substr($argument[1], 1);
|
$argumentName = substr($argument[1], 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -217,4 +218,13 @@ final class Method extends BaseTag implements Factory\StaticMethod
|
|||||||
|
|
||||||
return $arguments;
|
return $arguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static function stripRestArg($argument)
|
||||||
|
{
|
||||||
|
if (strpos($argument, '...') === 0) {
|
||||||
|
$argument = trim(substr($argument, 3));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $argument;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,6 +139,33 @@ class MethodTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals($expected, $fixture->getArguments());
|
$this->assertEquals($expected, $fixture->getArguments());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers ::create
|
||||||
|
*/
|
||||||
|
public function testRestArgumentIsParsedAsRegularArg()
|
||||||
|
{
|
||||||
|
$expected = [
|
||||||
|
[ 'name' => 'arg1', 'type' => new Void_() ],
|
||||||
|
[ 'name' => 'rest', 'type' => new Void_() ],
|
||||||
|
[ 'name' => 'rest2', 'type' => new Array_() ],
|
||||||
|
];
|
||||||
|
|
||||||
|
$descriptionFactory = m::mock(DescriptionFactory::class);
|
||||||
|
$resolver = new TypeResolver();
|
||||||
|
$context = new Context('');
|
||||||
|
$description = new Description('');
|
||||||
|
$descriptionFactory->shouldReceive('create')->with('', $context)->andReturn($description);
|
||||||
|
|
||||||
|
$fixture = Method::create(
|
||||||
|
'void myMethod($arg1, ...$rest, array ... $rest2)',
|
||||||
|
$resolver,
|
||||||
|
$descriptionFactory,
|
||||||
|
$context
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals($expected, $fixture->getArguments());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers ::__construct
|
* @covers ::__construct
|
||||||
* @covers ::getReturnType
|
* @covers ::getReturnType
|
||||||
|
|||||||
Reference in New Issue
Block a user