8000 [VarDumper] Fix blank strings display · symfony/symfony@4a43bad · GitHub
[go: up one dir, main page]

Skip to content

Commit 4a43bad

Browse files
committed
[VarDumper] Fix blank strings display
1 parent 02cafa9 commit 4a43bad

File tree

7 files changed

+108
-109
lines changed

7 files changed

+108
-109
lines changed

src/Symfony/Bridge/Twig/Tests/Extension/DumpExtensionTest.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,14 @@ public static function getDumpArgs()
9696
[
9797
[],
9898< 6D40 code class="diff-text syntax-highlighted-line">
[123, 456],
99-
"<pre class=sf-dump id=sf-dump data-indent-pad=\" \"><span class=sf-dump-num>123</span>\n</pre><script>Sfdump(\"sf-dump\")</script>\n"
100-
."<pre class=sf-dump id=sf-dump data-indent-pad=\" \"><span class=sf-dump-num>456</span>\n</pre><script>Sfdump(\"sf-dump\")</script>\n",
99+
"<pre class=sf-dump id=sf-dump data-indent-pad=\" \"><span class=\"sf-dump-num\">123</span>\n</pre><script>Sfdump(\"sf-dump\")</script>\n"
100+
."<pre class=sf-dump id=sf-dump data-indent-pad=\" \"><span class=\"sf-dump-num\">456</span>\n</pre><script>Sfdump(\"sf-dump\")</script>\n",
101101
],
102102
[
103103
['foo' => 'bar'],
104104
[],
105-
"<pre class=sf-dump id=sf-dump data-indent-pad=\" \"><span class=sf-dump-note>array:1</span> [<samp>\n"
106-
." \"<span class=sf-dump-key>foo</span>\" => \"<span class=sf-dump-str title=\"3 characters\">bar</span>\"\n"
105+
"<pre class=sf-dump id=sf-dump data-indent-pad=\" \"><span class=\"sf-dump-note\">array:1</span> [<samp>\n"
106+
." \"<span class=\"sf-dump-key\">foo</span>\" => \"<span class=\"sf-dump-str\" title=\"3 characters\">bar</span>\"\n"
107107
."</samp>]\n"
108108
."</pre><script>Sfdump(\"sf-dump\")</script>\n",
109109
],
@@ -136,7 +136,7 @@ public function testCustomDumper()
136136

137137
$this->assertEquals(
138138
'<pre class=sf-dump-test id=sf-dump data-indent-pad=" ">"'.
139-
"<span class=sf-dump-str title=\"3 characters\">foo</span>\"\n".
139+
"<span class=\"sf-dump-str\" title=\"3 characters\">foo</span>\"\n".
140140
"</pre><script>Sfdump(\"sf-dump\")</script>\n",
141141
$dump,
142142
'Custom dumper should be used to dump data.'

src/Symfony/Component/HttpKernel/Tests/DataCollector/DumpDataCollectorTest.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public function testDump()
4646

4747
$xDump = [
4848
[
49-
'data' => "<pre class=sf-dump id=sf-dump data-indent-pad=\" \"><span class=sf-dump-num>123</span>\n</pre><script>Sfdump(\"sf-dump\")</script>\n",
49+
'data' => "<pre class=sf-dump id=sf-dump data-indent-pad=\" \"><span class=\"sf-dump-num\">123</span>\n</pre><script>Sfdump(\"sf-dump\")</script>\n",
5050
'name' => 'DumpDataCollectorTest.php',
5151
'file' => __FILE__,
5252
'line' => $line F438 ,
@@ -111,8 +111,8 @@ public function testCollectHtml()
111111
$line = __LINE__ - 1;
112112
$file = __FILE__;
113113
$xOutput = <<<EOTXT
114-
<pre class=sf-dump id=sf-dump data-indent-pad=" "><a href="test://{$file}:{$line}" title="{$file}"><span class=sf-dump-meta>DumpDataCollectorTest.php</span></a> on line <span class=sf-dump-meta>{$line}</span>:
115-
<span class=sf-dump-num>123</span>
114+
<pre class=sf-dump id=sf-dump data-indent-pad=" "><a href="test://{$file}:{$line}" title="{$file}"><span class="sf-dump-meta">DumpDataCollectorTest.php</span></a> on line <span class="sf-dump-meta">{$line}</span>:
115+
<span class="sf-dump-num">123</span>
116116
</pre>
117117
EOTXT;
118118

src/Symfony/Component/HttpKernel/composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"symfony/translation-contracts": "^2.5|^3",
4545
"symfony/uid": "^5.4|^6.0|^7.0",
4646
"symfony/validator": "^6.4|^7.0",
47-
"symfony/var-dumper": "^5.4|^6.4|^7.0",
47+
"symfony/var-dumper": "^6.4|^7.0",
4848
"symfony/var-exporter": "^6.2|^7.0",
4949
"psr/cache": "^1.0|^2.0|^3.0",
5050
"twig/twig": "^2.13|^3.0.4"

src/Symfony/Component/VarDumper/Dumper/HtmlDumper.php

+26-27
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ function showCurrent(state)
663663
height: 0;
664664
clear: both;
665665
}
666-
pre.sf-dump span {
666+
pre.sf-dump .sf-dump-ellipsization {
667667
display: inline-flex;
668668
}
669669
pre.sf-dump a {
@@ -681,16 +681,12 @@ function showCurrent(state)
681681
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAHUlEQVQY02O8zAABilCaiQEN0EeA8QuUcX9g3QEAAjcC5piyhyEAAAAASUVORK5CYII=) #D3D3D3;
682682
}
683683
pre.sf-dump .sf-dump-ellipsis {
684-
display: inline-block;
685-
overflow: visible;
686684
text-overflow: ellipsis;
687-
max-width: 5em;
688685
white-space: nowrap;
689686
overflow: hidden;
690-
vertical-align: top;
691687
}
692-
pre.sf-dump .sf-dump-ellipsis+.sf-dump-ellipsis {
693-
max-width: none;
688+
pre.sf-dump .sf-dump-ellipsis-tail {
689+
flex-shrink: 0;
694690
}
695691
pre.sf-dump code {
696692
display:inline;
@@ -793,7 +789,7 @@ public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut)
793789
if ('' === $str && isset($cursor->attr['img-data'], $cursor->attr['content-type'])) {
794790
$this->dumpKey($cursor);
795791
$this->line .= $this->style('default', $cursor->attr['img-size'] ?? '', []);
796-
$this->line .= $cursor->depth >= $this->displayOptions['maxDepth'] ? ' <samp class=sf-dump-compact>' : ' <samp class=sf-dump-expanded>';
792+
$this->line .= $cursor->depth >= $this->displayOptions['maxDepth'] ? ' <samp class="sf-dump-compact">' : ' <samp class="sf-dump-expanded">';
797793
$this->endValue($cursor);
798794
$this->line .= $this->indentPad;
799795
$this->line .= sprintf('<img src="data:%s;base64,%s" /></samp>', $cursor->attr['content-type'], base64_encode($cursor->attr['img-data']));
@@ -815,10 +811,10 @@ public function enterHash(Cursor $cursor, int $type, string|int|null $class, boo
815811

816812
if ($cursor->skipChildren || $cursor->depth >= $this->displayOptions['maxDepth']) {
817813
$cursor->skipChildren = false;
818-
$eol = ' class=sf-dump-compact>';
814+
$eol = ' class="sf-dump-compact">';
819815
} else {
820816
$this->expandNextHash = false;
821-
$eol = ' class=sf-dump-expanded>';
817+
$eol = ' class="sf-dump-expanded">';
822818
}
823819

824820
if ($hasChild) {
@@ -856,53 +852,56 @@ protected function style(string $style, string $value, array $attr = []): string
856852

857853
if ('ref' === $style) {
858854
if (empty($attr['count'])) {
859-
return sprintf('<a class=sf-dump-ref>%s</a>', $v);
855+
return sprintf('<a class="sf-dump-ref">%s</a>', $v);
860856
}
861857
$r = ('#' !== $v[0] ? 1 - ('@' !== $v[0]) : 2).substr($value, 1);
862858

863-
return sprintf('<a class=sf-dump-ref href=#%s-ref%s title="%d occurrences">%s</a>', $this->dumpId, $r, 1 + $attr['count'], $v);
859+
return sprintf('<a class="sf-dump-ref" href="#%s-ref%s" title="%d occurrences">%s</a>', $this->dumpId, $r, 1 + $attr['count'], $v);
864860
}
865861

862+
$dumpClass = 'sf-dump-'.$style;
863+
$dumpTitle = '';
864+
866865
if ('const' === $style && isset($attr['value'])) {
867-
$style .= sprintf(' title="%s"', esc(\is_scalar($attr['value']) ? $attr['value'] : json_encode($attr['value'])));
866+
$dumpTitle = esc(\is_scalar($attr['value']) ? $attr['value'] : json_encode($attr['value']));
868867
} elseif ('public' === $style) {
869-
$style .= sprintf(' title="%s"', empty($attr['dynamic']) ? 'Public property' : 'Runtime added dynamic property');
868+
$dumpTitle = empty($attr['dynamic']) ? 'Public property' : 'Runtime added dynamic property';
870869
} elseif ('str' === $style && 1 < $attr['length']) {
871-
$style .= sprintf(' title="%d%s characters"', $attr['length'], $attr['binary'] ? ' binary or non-UTF-8' : '');
870+
$dumpTitle = sprintf('%d%s characters', $attr['length'], $attr['binary'] ? ' binary or non-UTF-8' : '');
872871
} elseif ('note' === $style && 0 < ($attr['depth'] ?? 0) && false !== $c = strrpos($value, '\\')) {
873-
$style .= ' title=""';
874872
$attr += [
875873
'ellipsis' => \strlen($value) - $c,
876874
'ellipsis-type' => 'note',
877875
'ellipsis-tail' => 1,
878876
];
879877
} elseif ('protected' === $style) {
880-
$style .= ' title="Protected property"';
878+
$dumpTitle = 'Protected property';
881879
} elseif ('meta' === $style && isset($attr['title'])) {
882-
$style .= sprintf(' title="%s"', esc($this->utf8Encode($attr['title'])));
880+
$dumpTitle = esc($this->utf8Encode($attr['title']));
883881
} elseif ('private' === $style) {
884-
$style .= sprintf(' title="Private property defined in class:&#10;`%s`"', esc($this->utf8Encode($attr['class'])));
882+
$dumpTitle = sprintf('Private property defined in class:&#10;`%s`"', esc($this->utf8Encode($attr['class'])));
885883
}
886884

887885
if (isset($attr['ellipsis'])) {
888-
$class = 'sf-dump-ellipsis';
886+
$dumpClass .= ' sf-dump-ellipsization';
887+
$ellipsisClass = 'sf-dump-ellipsis';
889888
if (isset($attr['ellipsis-type'])) {
890-
$class = sprintf('"%s sf-dump-ellipsis-%s"', $class, $attr['ellipsis-type']);
889+
$ellipsisClass .= ' sf-dump-ellipsis-'.$attr['ellipsis-type'];
891890
}
892891
$label = esc(substr($value, -$attr['ellipsis']));
893-
$style = str_replace(' title="', " title=\"$v\n", $style);
894-
$v = sprintf('<span class=%s>%s</span>', $class, substr($v, 0, -\strlen($label)));
892+
$dumpTitle = $v."\n".$dumpTitle;
893+
$v = sprintf('<span class="%s">%s</span>', $ellipsisClass, substr($v, 0, -\strlen($label)));
895894

896895
if (!empty($attr['ellipsis-tail'])) {
897896
$tail = \strlen(esc(substr($value, -$attr['ellipsis'], $attr['ellipsis-tail'])));
898-
$v .= sprintf('<span class=%s>%s</span>%s', $class, substr($label, 0, $tail), substr($label, $tail));
897+
$v .= sprintf('<span class="%s">%s</span><span class="sf-dump-ellipsis-tail">%s</span>', $ellipsisClass, substr($label, 0, $tail), substr($label, $tail));
899898
} else {
900-
$v .= $label;
899+
$v .= sprintf('<span class="sf-dump-ellipsis-tail">%s</span>', $label);
901900
}
902901
}
903902

904903
$map = static::$controlCharsMap;
905-
$v = "<span class=sf-dump-{$style}>".preg_replace_callback(static::$controlCharsRx, function ($c) use ($map) {
904+
$v = '<span class="'.$dumpClass.($dumpTitle ? '" title="'.$dumpTitle : '').'">'.preg_replace_callback(static::$controlCharsRx, function ($c) use ($map) {
906905
$s = $b = '<span class="sf-dump-default';
907906
$c = $c[$i = 0];
908907
if ($ns = "\r" === $c[$i] || "\n" === $c[$i]) {
@@ -926,7 +925,7 @@ protected function style(string $style, string $value, array $attr = []): string
926925

927926
if (!($attr['binary'] ?? false)) {
928927
$v = preg_replace_callback(static::$unicodeCharsRx, function ($c) {
929-
return '<span class=sf-dump-default>\u{'.strtoupper(dechex(mb_ord($c[0]))).'}</span>';
928+
return '<span class="sf-dump-default">\u{'.strtoupper(dechex(mb_ord($c[0]))).'}</span>';
930929
}, $v);
931930
}
932931

src/Symfony/Component/VarDumper/Tests/Caster/ExceptionCasterTest.php

+9-9
Original file line numberDiff line numberDiff line change
@@ -256,15 +256,15 @@ public function testHtmlDump()
256256
$dump = $dumper->dump($cloner->cloneVar($e)->withRefHandles(false), true);
257257

258258
$expectedDump = <<<'EODUMP'
259-
<foo></foo><bar><span class=sf-dump-note>Exception</span> {<samp data-depth=1 class=sf-dump-expanded>
260-
#<span class=sf-dump-protected title="Protected property">message</span>: "<span class=sf-dump-str>1</span>"
261-
#<span class=sf-dump-protected title="Protected property">code</span>: <span class=sf-dump-num>0</span>
262-
#<span class=sf-dump-protected title="Protected property">file</span>: "<span class=sf-dump-str title="%sExceptionCasterTest.php
263-
%d characters"><span class="sf-dump-ellipsis sf-dump-ellipsis-path">%s%eVarDumper</span><span class="sf-dump-ellipsis sf-dump-ellipsis-path">%e</span>Tests%eCaster%eExceptionCasterTest.php</span>"
264-
#<span class=sf-dump-protected title="Protected property">line</span>: <span class=sf-dump-num>%d</span>
265-
<span class=sf-dump-meta>trace</span>: {<samp data-depth=2 class=sf-dump-compact>
266-
<span class=sf-dump-meta title="%sExceptionCasterTest.php
267-
Stack level %d."><span class="sf-dump-ellipsis sf-dump-ellipsis-path">%s%eVarDumper</span><span class="sf-dump-ellipsis sf-dump-ellipsis-path">%e</span>Tests%eCaster%eExceptionCasterTest.php</span>:<span class=sf-dump-num>%d</span>
259+
<foo></foo><bar><span class="sf-dump-note">Exception</span> {<samp data-depth=1 class="sf-dump-expanded">
260+
#<span class="sf-dump-protected" title="Protected property">message</span>: "<span class="sf-dump-str">1</span>"
261+
#<span class="sf-dump-protected" title="Protected property">code</span>: <span class="sf-dump-num">0</span>
262+
#<span class="sf-dump-protected" title="Protected property">file</span>: "<span class="sf-dump-str sf-dump-ellipsization" title="%sExceptionCasterTest.php
263+
%d characters"><span class="sf-dump-ellipsis sf-dump-ellipsis-path">%s%eVarDumper</span><span class="sf-dump-ellipsis sf-dump-ellipsis-path">%e</span><span class="sf-dump-ellipsis-tail">Tests%eCaster%eExceptionCasterTest.php</span></span>"
264+
#<span class="sf-dump-protected" title="Protected property">line</span>: <span class="sf-dump-num">%d</span>
265+
<span class="sf-dump-meta">trace</span>: {<samp data-depth=2 class="sf-dump-compact">
266+
<span class="sf-dump-meta sf-dump-ellipsization" title="%sExceptionCasterTest.php
267+
Stack level %d."><span class="sf-dump-ellipsis sf-dump-ellipsis-path">%s%eVarDumper</span><span class="sf-dump-ellipsis sf-dump-ellipsis-path">%e</span><span class="sf-dump-ellipsis-tail">Tests%eCaster%eExceptionCasterTest.php</span></span>:<span class="sf-dump-num">%d</span>
268268
&#8230;%d
269269
</samp>}
270270
</samp>}

src/Symfony/Component/VarDumper/Tests/Caster/StubCasterTest.php

+13-13
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ public function testLinkStub()
113113
$dump = $dumper->dump($cloner->cloneVar($var), true);
114114

115115
$expectedDump = <<<'EODUMP'
116-
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp data-depth=1 class=sf-dump-expanded>
117-
<span class=sf-dump-index>0</span> => "<a href="%sStubCasterTest.php:0" rel="noopener noreferrer"><span class=sf-dump-str title="55 characters">Symfony\Component\VarDumper\Tests\Caster\StubCasterTest</span></a>"
116+
<foo></foo><bar><span class="sf-dump-note">array:1</span> [<samp data-depth=1 class="sf-dump-expanded">
117+
<span class="sf-dump-index">0</span> => "<a href="%sStubCasterTest.php:0" rel="noopener noreferrer"><span class="sf-dump-str" title="55 characters">Symfony\Component\VarDumper\Tests\Caster\StubCasterTest</span></a>"
118118
</samp>]
119119
</bar>
120120
EODUMP;
@@ -134,8 +134,8 @@ public function testLinkStubWithNoFileLink()
134134
$dump = $dumper->dump($cloner->cloneVar($var), true);
135135

136136
$expectedDump = <<<'EODUMP'
137-
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp data-depth=1 class=sf-dump-expanded>
138-
<span class=sf-dump-index>0</span> => "<a href="http://example.com" target="_blank" rel="noopener noreferrer"><span class=sf-dump-str title="11 characters">example.com</span></a>"
137+
<foo></foo><bar><span class="sf-dump-note">array:1</span> [<samp data-depth=1 class="sf-dump-expanded">
138+
<span class="sf-dump-index">0</span> => "<a href="http://example.com" target="_blank" rel="noopener noreferrer"><span class="sf-dump-str" title="11 characters">example.com</span></a>"
139139
</samp>]
140140
</bar>
141141
EODUMP;
@@ -154,8 +154,8 @@ public function testClassStub()
154154
$dump = $dumper->dump($cloner->cloneVar($var), true, ['fileLinkFormat' => '%f:%l']);
155155

156156
$expectedDump = <<<'EODUMP'
157-
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp data-depth=1 class=sf-dump-expanded>
158-
<span class=sf-dump-index>0</span> => "<a href="%sFooInterface.php:10" rel="noopener noreferrer"><span class=sf-dump-str title="40 characters">hello(?stdClass $a, ?stdClass $b = null)</span></a>"
157+
<foo></foo><bar><span class="sf-dump-note">array:1</span> [<samp data-depth=1 class="sf-dump-expanded">
158+
<span class="sf-dump-index">0</span> => "<a href="%sFooInterface.php:10" rel="noopener noreferrer"><span class="sf-dump-str" title="40 characters">hello(?stdClass $a, ?stdClass $b = null)</span></a>"
159159
</samp>]
160160
</bar>
161161
EODUMP;
@@ -174,9 +174,9 @@ public function testClassStubWithNotExistingClass()
174174
$dump = $dumper->dump($cloner->cloneVar($var), true);
175175

176176
$expectedDump = <<<'EODUMP'
177-
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp data-depth=1 class=sf-dump-expanded>
178-
<span class=sf-dump-index>0</span> => "<span class=sf-dump-str title="Symfony\Component\VarDumper\Tests\Caster\NotExisting
179-
52 characters"><span class="sf-dump-ellipsis sf-dump-ellipsis-class">Symfony\Component\VarDumper\Tests\Caster</span><span class="sf-dump-ellipsis sf-dump-ellipsis-class">\</span>NotExisting</span>"
177+
<foo></foo><bar><span class="sf-dump-note">array:1</span> [<samp data-depth=1 class="sf-dump-expanded">
178+
<span class="sf-dump-index">0</span> => "<span class="sf-dump-str sf-dump-ellipsization" title="Symfony\Component\VarDumper\Tests\Caster\NotExisting
179+
52 characters"><span class="sf-dump-ellipsis sf-dump-ellipsis-class">Symfony\Component\VarDumper\Tests\Caster</span><span class="sf-dump-ellipsis sf-dump-ellipsis-class">\</span><span class="sf-dump-ellipsis-tail">NotExisting</span></span>"
180180
</samp>]
181181
</bar>
182182
EODUMP;
@@ -195,8 +195,8 @@ public function testClassStubWithNotExistingMethod()
195195
$dump = $dumper->dump($cloner->cloneVar($var), true, ['fileLinkFormat' => '%f:%l']);
196196

197197
$expectedDump = <<<'EODUMP'
198-
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp data-depth=1 class=sf-dump-expanded>
199-
<span class=sf-dump-index>0</span> => "<a href="%sFooInterface.php:5" rel="noopener noreferrer"><span class=sf-dump-str title="5 characters">hello</span></a>"
198+
<foo></foo><bar><span class="sf-dump-note">array:1</span> [<samp data-depth=1 class="sf-dump-expanded">
199+
<span class="sf-dump-index">0</span> => "<a href="%sFooInterface.php:5" rel="noopener noreferrer"><span class="sf-dump-str" title="5 characters">hello</span></a>"
200200
</samp>]
201201
</bar>
202202
EODUMP;
@@ -216,8 +216,8 @@ public function testClassStubWithAnonymousClass()
216216
$dump = $dumper->dump($cloner->cloneVar($var), true, ['fileLinkFormat' => '%f:%l']);
217217

218218
$expectedDump = <<<'EODUMP'
219-
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp data-depth=1 class=sf-dump-expanded>
220-
<span class=sf-dump-index>0</span> => "<a href="%sStubCasterTest.php:209" rel="noopener noreferrer"><span class=sf-dump-str title="19 characters">Exception@anonymous</span></a>"
219+
<foo></foo><bar><span class="sf-dump-note">array:1</span> [<samp data-depth=1 class="sf-dump-expanded">
220+
<span class="sf-dump-index">0</span> => "<a href="%sStubCasterTest.php:209" rel="noopener noreferrer"><span class="sf-dump-str" title="19 characters">Exception@anonymous</span></a>"
221221
</samp>]
222222
</bar>
223223
EODUMP;

0 commit comments

Comments
 (0)
0