Skip to content

Commit

Permalink
feature #21653 [VarDumper] Added a way to print or not comma separato…
Browse files Browse the repository at this point in the history
…r and/or trailing comma (lyrixx)

This PR was merged into the 3.3-dev branch.

Discussion
----------

[VarDumper] Added a way to print or not comma separator and/or trailing comma

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

---

Usecase: Be able to display a dump on one line.
It's already used in the following projets: https://github.com/bobthecow/psysh/blob/master/src/Psy/VarDumper/Dumper.php#L93-L95

Commits
-------

1ef0751 [VarDumper] Added a way to print or not comma separator and/or trailing comma
  • Loading branch information
fabpot committed Feb 20, 2017
2 parents eb678a0 + 1ef0751 commit 0476eb5
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 4 deletions.
2 changes: 2 additions & 0 deletions src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php
Expand Up @@ -23,6 +23,8 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface
{
const DUMP_LIGHT_ARRAY = 1;
const DUMP_STRING_LENGTH = 2;
const DUMP_COMMA_SEPARATOR = 4;
const DUMP_TRAILING_COMMA = 8;

public static $defaultOutput = 'php://output';

Expand Down
23 changes: 19 additions & 4 deletions src/Symfony/Component/VarDumper/Dumper/CliDumper.php
Expand Up @@ -155,7 +155,7 @@ public function dumpScalar(Cursor $cursor, $type, $value)

$this->line .= $this->style($style, $value, $attr);

$this->dumpLine($cursor->depth, true);
$this->endValue($cursor);
}

/**
Expand All @@ -171,7 +171,7 @@ public function dumpString(Cursor $cursor, $str, $bin, $cut)
}
if ('' === $str) {
$this->line .= '""';
$this->dumpLine($cursor->depth, true);
$this->endValue($cursor);
} else {
$attr += array(
'length' => 0 <= $cut ? mb_strlen($str, 'UTF-8') + $cut : 0,
Expand Down Expand Up @@ -237,7 +237,11 @@ public function dumpString(Cursor $cursor, $str, $bin, $cut)
$lineCut = 0;
}

$this->dumpLine($cursor->depth, $i > $m);
if ($i > $m) {
$this->endValue($cursor);
} else {
$this->dumpLine($cursor->depth);
}
}
}
}
Expand Down Expand Up @@ -280,7 +284,7 @@ public function leaveHash(Cursor $cursor, $type, $class, $hasChild, $cut)
{
$this->dumpEllipsis($cursor, $hasChild, $cut);
$this->line .= Cursor::HASH_OBJECT === $type ? '}' : (Cursor::HASH_RESOURCE !== $type ? ']' : ($hasChild ? '}' : ''));
$this->dumpLine($cursor->depth, true);
$this->endValue($cursor);
}

/**
Expand Down Expand Up @@ -486,4 +490,15 @@ protected function dumpLine($depth, $endOfValue = false)
}
parent::dumpLine($depth);
}

protected function endValue(Cursor $cursor)
{
if (self::DUMP_TRAILING_COMMA & $this->flags && 0 < $cursor->depth) {
$this->line .= ',';
} elseif (self::DUMP_COMMA_SEPARATOR & $this->flags && 1 < $cursor->hashLength - $cursor->hashIndex) {
$this->line .= ',';
}

$this->dumpLine($cursor->depth, true);
}
}
61 changes: 61 additions & 0 deletions src/Symfony/Component/VarDumper/Tests/CliDumperTest.php
Expand Up @@ -108,6 +108,67 @@ class: "Symfony\Component\VarDumper\Tests\CliDumperTest"
);
}

/**
* @dataProvider provideDumpWithCommaFlagTests
*/
public function testDumpWithCommaFlag($expected, $flags)
{
$dumper = new CliDumper(null, null, $flags);
$dumper->setColors(false);
$cloner = new VarCloner();

$var = array(
'array' => array('a', 'b'),
'string' => 'hello',
'multiline string' => "this\nis\na\multiline\nstring",
);

$dump = $dumper->dump($cloner->cloneVar($var), true);

$this->assertSame($expected, $dump);
}

public function provideDumpWithCommaFlagTests()
{
$expected = <<<'EOTXT'
array:3 [
"array" => array:2 [
0 => "a",
1 => "b"
],
"string" => "hello",
"multiline string" => """
this\n
is\n
a\multiline\n
string
"""
]
EOTXT;

yield array($expected, CliDumper::DUMP_COMMA_SEPARATOR);

$expected = <<<'EOTXT'
array:3 [
"array" => array:2 [
0 => "a",
1 => "b",
],
"string" => "hello",
"multiline string" => """
this\n
is\n
a\multiline\n
string
""",
]
EOTXT;

yield array($expected, CliDumper::DUMP_TRAILING_COMMA);
}

/**
* @requires extension xml
*/
Expand Down

0 comments on commit 0476eb5

Please sign in to comment.