From 16f2bd58d99a533046c4574136244037c9c5b4ba Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 11 Sep 2018 14:39:49 +0200 Subject: [PATCH] [VarDumper] fix dumping signature of callables --- .../Component/VarDumper/Caster/ClassStub.php | 3 --- .../VarDumper/Caster/ReflectionCaster.php | 18 ++++++++++++------ .../Tests/Caster/ReflectionCasterTest.php | 11 ++--------- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/Symfony/Component/VarDumper/Caster/ClassStub.php b/src/Symfony/Component/VarDumper/Caster/ClassStub.php index 3372d4e351..be44e375b1 100644 --- a/src/Symfony/Component/VarDumper/Caster/ClassStub.php +++ b/src/Symfony/Component/VarDumper/Caster/ClassStub.php @@ -70,9 +70,6 @@ class ClassStub extends ConstStub } else { $this->value .= $s; } - if (isset($this->attr['ellipsis'])) { - $this->attr['ellipsis'] += \strlen($this->value) - \strlen($identifier); - } } } catch (\ReflectionException $e) { return; diff --git a/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php b/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php index 703cf10226..a811c124dc 100644 --- a/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php +++ b/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php @@ -33,13 +33,22 @@ class ReflectionCaster public static function castClosure(\Closure $c, array $a, Stub $stub, $isNested, $filter = 0) { - $prefix = Caster::PREFIX_VIRTUAL; $c = new \ReflectionFunction($c); $a = static::castFunctionAbstract($c, $a, $stub, $isNested, $filter); $stub->class .= self::getSignature($a); + $prefix = Caster::PREFIX_DYNAMIC; + unset($a['name'], $a[$prefix.'this'], $a[$prefix.'parameter'], $a[Caster::PREFIX_VIRTUAL.'extra']); + $prefix = Caster::PREFIX_VIRTUAL; + + if ($filter & Caster::EXCLUDE_VERBOSE) { + $stub->cut += ($c->getFileName() ? 2 : 0) + \count($a); + + return array(); + } + if (isset($a[$prefix.'parameters'])) { foreach ($a[$prefix.'parameters']->value as &$v) { $param = $v; @@ -53,14 +62,11 @@ class ReflectionCaster } } - if (!($filter & Caster::EXCLUDE_VERBOSE) && $f = $c->getFileName()) { + if ($f = $c->getFileName()) { $a[$prefix.'file'] = new LinkStub($f, $c->getStartLine()); $a[$prefix.'line'] = $c->getStartLine().' to '.$c->getEndLine(); } - $prefix = Caster::PREFIX_DYNAMIC; - unset($a['name'], $a[$prefix.'this'], $a[$prefix.'parameter'], $a[Caster::PREFIX_VIRTUAL.'extra']); - return $a; } @@ -333,7 +339,7 @@ class ReflectionCaster } } } - $signature = '('.substr($signature, 2).')'; + $signature = (empty($a[$prefix.'returnsReference']) ? '' : '&').'('.substr($signature, 2).')'; if (isset($a[$prefix.'returnType'])) { $signature .= ': '.substr(strrchr('\\'.$a[$prefix.'returnType'], '\\'), 1); diff --git a/src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php b/src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php index 9c8bf6386d..e43d308f44 100644 --- a/src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Caster/ReflectionCasterTest.php @@ -87,16 +87,9 @@ EOTXT public function testClosureCasterExcludingVerbosity() { - $var = function () {}; + $var = function &($a = 5) {}; - $expectedDump = <<assertDumpEquals($expectedDump, $var, Caster::EXCLUDE_VERBOSE); + $this->assertDumpEquals('Closure&($a = 5) { …6}', $var, Caster::EXCLUDE_VERBOSE); } public function testReflectionParameter()