Skip to content

Commit

Permalink
[VarDumper] Add support of named arguments to dd() and dump() to …
Browse files Browse the repository at this point in the history
…display a "section name"
  • Loading branch information
alexandre-daubois committed Dec 1, 2022
1 parent 13059f6 commit f148793
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 15 deletions.
5 changes: 5 additions & 0 deletions src/Symfony/Component/VarDumper/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
CHANGELOG
=========

6.3
---

* Add support of named arguments to `dd()` and `dump()` to display a "section name"

6.2
---

Expand Down
10 changes: 10 additions & 0 deletions src/Symfony/Component/VarDumper/Cloner/Data.php
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,11 @@ public function withContext(array $context): static
return $data;
}

public function getContext(): array
{
return $this->context;
}

/**
* Seeks to a specific key in nested data structures.
*/
Expand Down Expand Up @@ -266,6 +271,11 @@ public function dump(DumperInterface $dumper)
if ($cursor->attr = $this->context[SourceContextProvider::class] ?? []) {
$cursor->attr['if_links'] = true;
$cursor->hashType = -1;

if (null !== ($sectionName = $this->context['section_name'] ?? null)) {
$dumper->dumpScalar($cursor, 'default', $sectionName);
}

$dumper->dumpScalar($cursor, 'default', '^');
$cursor->attr = ['if_links' => true];
$dumper->dumpScalar($cursor, 'default', ' ');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public function __construct(DataDumperInterface $wrappedDumper, array $contextPr

public function dump(Data $data)
{
$context = [];
$context = $data->getContext();
foreach ($this->contextProviders as $contextProvider) {
$context[$contextProvider::class] = $contextProvider->getContext();
}
Expand Down
19 changes: 9 additions & 10 deletions src/Symfony/Component/VarDumper/Resources/functions/dump.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,19 @@
if (!function_exists('dump')) {
/**
* @author Nicolas Grekas <p@tchwork.com>
* @author Alexandre Daubois <alex.daubois@gmail.com>
*/
function dump(mixed $var, mixed ...$moreVars): mixed
function dump(mixed ...$vars): mixed
{
VarDumper::dump($var);

foreach ($moreVars as $v) {
VarDumper::dump($v);
foreach ($vars as $key => $v) {
VarDumper::dump($v, is_numeric($key) ? null : $key);
}

if (1 < func_num_args()) {
return func_get_args();
if (1 < count($vars)) {
return $vars;
}

return $var;
return reset($vars);
}
}

Expand All @@ -41,8 +40,8 @@ function dd(...$vars): void
header('HTTP/1.1 500 Internal Server Error');
}

foreach ($vars as $v) {
VarDumper::dump($v);
foreach ($vars as $key => $v) {
VarDumper::dump($v, is_numeric($key) ? null : $key);
}

exit(1);
Expand Down
28 changes: 28 additions & 0 deletions src/Symfony/Component/VarDumper/Tests/Dumper/FunctionsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,19 @@ public function testDumpReturnsFirstArg()
$this->assertEquals($var1, $return);
}

public function testDumpReturnsFirstNamedArgWithoutSectionName()
{
$this->setupVarDumper();

$var1 = 'a';

ob_start();
$return = dump(first: $var1);
ob_end_clean();

$this->assertEquals($var1, $return);
}

public function testDumpReturnsAllArgsInArray()
{
$this->setupVarDumper();
Expand All @@ -46,6 +59,21 @@ public function testDumpReturnsAllArgsInArray()
$this->assertEquals([$var1, $var2, $var3], $return);
}

public function testDumpReturnsAllNamedArgsInArray()
{
$this->setupVarDumper();

$var1 = 'a';
$var2 = 'b';
$var3 = 'c';

ob_start();
$return = dump($var1, second: $var2, third: $var3);
ob_end_clean();

$this->assertEquals([$var1, 'second' => $var2, 'third' => $var3], $return);
}

protected function setupVarDumper()
{
$cloner = new VarCloner();
Expand Down
13 changes: 9 additions & 4 deletions src/Symfony/Component/VarDumper/VarDumper.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@ class VarDumper
*/
private static $handler;

public static function dump(mixed $var)
public static function dump(mixed $var, string $sectionName = null)
{
if (null === self::$handler) {
self::register();
}

return (self::$handler)($var);
return (self::$handler)($var, $sectionName);
}

public static function setHandler(callable $callable = null): ?callable
Expand Down Expand Up @@ -90,8 +90,13 @@ private static function register(): void
$dumper = new ContextualizedDumper($dumper, [new SourceContextProvider()]);
}

self::$handler = function ($var) use ($cloner, $dumper) {
$dumper->dump($cloner->cloneVar($var));
self::$handler = function ($var, string $sectionName = null) use ($cloner, $dumper) {
$dumper->dump(
$cloner->cloneVar($var)
->withContext([
'section_name' => $sectionName,
])
);
};
}

Expand Down

0 comments on commit f148793

Please sign in to comment.