Add splat operator (...) support (#860)

* Add splat operator (...) support

* Add test
This commit is contained in:
Yuta Nagamiya
2019-12-25 12:17:50 +01:00
committed by Barry vd. Heuvel
parent fcf3fae860
commit e7734d3c20
2 changed files with 10 additions and 8 deletions
+2 -2
View File
@@ -314,9 +314,9 @@ class Method
$params = array(); $params = array();
$paramsWithDefault = array(); $paramsWithDefault = array();
foreach ($method->getParameters() as $param) { foreach ($method->getParameters() as $param) {
$paramStr = '$' . $param->getName(); $paramStr = $param->isVariadic() ? '...$' . $param->getName() : '$' . $param->getName();
$params[] = $paramStr; $params[] = $paramStr;
if ($param->isOptional()) { if ($param->isOptional() && !$param->isVariadic()) {
$default = $param->isDefaultValueAvailable() ? $param->getDefaultValue() : null; $default = $param->isDefaultValueAvailable() ? $param->getDefaultValue() : null;
if (is_bool($default)) { if (is_bool($default)) {
$default = $default ? 'true' : 'false'; $default = $default ? 'true' : 'false';
+8 -6
View File
@@ -32,15 +32,16 @@ class ExampleTest extends \PHPUnit_Framework_TestCase
* *
* @param string $last * @param string $last
* @param string $first * @param string $first
* @param string $middle
* @static * @static
*/'; */';
$this->assertEquals($output, $method->getDocComment('')); $this->assertEquals($output, $method->getDocComment(''));
$this->assertEquals('setName', $method->getName()); $this->assertEquals('setName', $method->getName());
$this->assertEquals('\\'.ExampleClass::class, $method->getDeclaringClass()); $this->assertEquals('\\'.ExampleClass::class, $method->getDeclaringClass());
$this->assertEquals('$last, $first', $method->getParams(true)); $this->assertEquals('$last, $first, ...$middle', $method->getParams(true));
$this->assertEquals(['$last', '$first'], $method->getParams(false)); $this->assertEquals(['$last', '$first', '...$middle'], $method->getParams(false));
$this->assertEquals('$last, $first = \'Barry\'', $method->getParamsWithDefault(true)); $this->assertEquals('$last, $first = \'Barry\', ...$middle', $method->getParamsWithDefault(true));
$this->assertEquals(['$last', '$first = \'Barry\''], $method->getParamsWithDefault(false)); $this->assertEquals(['$last', '$first = \'Barry\'', '...$middle'], $method->getParamsWithDefault(false));
$this->assertEquals(true, $method->shouldReturn()); $this->assertEquals(true, $method->shouldReturn());
} }
} }
@@ -50,9 +51,10 @@ class ExampleClass
/** /**
* @param string $last * @param string $last
* @param string $first * @param string $first
* @param string $middle
*/ */
public function setName($last, $first = 'Barry') public function setName($last, $first = 'Barry', ...$middle)
{ {
return; return;
} }
} }