Skip to content

Commit 93fe599

Browse files
[VarDumper] UML prefixes for properties
1 parent d7aa4aa commit 93fe599

File tree

4 files changed

+55
-42
lines changed

4 files changed

+55
-42
lines changed

Dumper/CliDumper.php

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ class CliDumper extends AbstractDumper
3939
'protected' => '38;5;166',
4040
'private' => '38;5;160',
4141
'meta' => '38;5;27',
42+
'key' => '38;5;27',
43+
'index' => '38;5;27',
4244
);
4345

4446
protected static $controlCharsRx = '/[\x00-\x1F\x7F]/';
@@ -258,14 +260,16 @@ protected function dumpKey(Cursor $cursor)
258260
if (null !== $key = $cursor->hashKey) {
259261
$attr = array('binary' => $cursor->hashKeyIsBinary);
260262
$bin = $cursor->hashKeyIsBinary ? 'b' : '';
263+
$style = 'key';
261264
switch ($cursor->hashType) {
262265
default:
263266
case Cursor::HASH_INDEXED:
267+
$style = 'index';
264268
case Cursor::HASH_ASSOC:
265269
if (is_int($key)) {
266-
$this->line .= $this->style('meta', $key).' => ';
270+
$this->line .= $this->style($style, $key).' => ';
267271
} else {
268-
$this->line .= $bin.'"'.$this->style('meta', $key).'" => ';
272+
$this->line .= $bin.'"'.$this->style($style, $key).'" => ';
269273
}
270274
break;
271275

@@ -274,28 +278,33 @@ protected function dumpKey(Cursor $cursor)
274278
// No break;
275279
case Cursor::HASH_OBJECT:
276280
if (!isset($key[0]) || "\0" !== $key[0]) {
277-
$this->line .= $bin.$this->style('public', $key).': ';
281+
$this->line .= '+'.$bin.$this->style('public', $key).': ';
278282
} elseif (0 < strpos($key, "\0", 1)) {
279283
$key = explode("\0", substr($key, 1), 2);
280284

281285
switch ($key[0]) {
282286
case '+': // User inserted keys
283287
$attr['dynamic'] = true;
284-
$this->line .= $bin.'"'.$this->style('public', $key[1], $attr).'": ';
288+
$this->line .= '+'.$bin.'"'.$this->style('public', $key[1], $attr).'": ';
285289
break 2;
286-
287-
case '~': $style = 'meta'; break;
288-
case '*': $style = 'protected'; break;
290+
case '~':
291+
$style = 'meta';
292+
break;
293+
case '*':
294+
$style = 'protected';
295+
$bin = '#'.$bin;
296+
break;
289297
default:
290298
$attr['class'] = $key[0];
291299
$style = 'private';
300+
$bin = '-'.$bin;
292301
break;
293302
}
294303

295304
$this->line .= $bin.$this->style($style, $key[1], $attr).': ';
296305
} else {
297306
// This case should not happen
298-
$this->line .= $bin.'"'.$this->style('private', $key, array('class' => '')).'": ';
307+
$this->line .= '-'.$bin.'"'.$this->style('private', $key, array('class' => '')).'": ';
299308
}
300309
break;
301310
}

Dumper/HtmlDumper.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ class HtmlDumper extends CliDumper
4242
'protected' => 'color:#D75F00',
4343
'private' => 'color:#D70000',
4444
'meta' => 'color:#005FFF',
45+
'key' => 'color:#005FFF',
46+
'index' => 'color:#005FFF',
4547
);
4648

4749
/**
@@ -337,8 +339,8 @@ protected function style($style, $value, $attr = array())
337339

338340
if ('const' === $style && array_key_exists('value', $attr)) {
339341
$style .= sprintf(' title="%s"', htmlspecialchars(json_encode($attr['value']), ENT_QUOTES, 'UTF-8'));
340-
} elseif ('public' === $style && !empty($attr['dynamic'])) {
341-
$style .= ' title="Runtime added dynamic property"';
342+
} elseif ('public' === $style) {
343+
$style .= sprintf(' title="%s"', empty($attr['dynamic']) ? 'Public property' : 'Runtime added dynamic property');
342344
} elseif ('str' === $style && 1 < $attr['length']) {
343345
$style .= sprintf(' title="%s%s characters"', $attr['length'], $attr['binary'] ? ' binary or non-UTF-8' : '');
344346
} elseif ('note' === $style) {
@@ -347,8 +349,10 @@ protected function style($style, $value, $attr = array())
347349
} elseif (':' === $v[0]) {
348350
return sprintf('<abbr title="`%s` resource" class=sf-dump-%s>%s</abbr>', substr($v, 1), $style, $v);
349351
}
352+
} elseif ('protected' === $style) {
353+
$style .= ' title="Protected property"';
350354
} elseif ('private' === $style) {
351-
$style .= sprintf(' title="%s::%s"', $attr['class'], $v);
355+
$style .= sprintf(' title="Private property defined in class:&#10;`%s`"', $attr['class']);
352356
}
353357

354358
return "<span class=sf-dump-$style>$v</span>";

Tests/CliDumperTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ public function testGet()
7272
}
7373
8 => :Unknown {@{$res2}}
7474
"obj" => Symfony\Component\VarDumper\Tests\Fixture\DumbFoo {#%d
75-
foo: "foo"
76-
"bar": "bar"
75+
+foo: "foo"
76+
+"bar": "bar"
7777
}
7878
"closure" => Closure {#%d
7979
reflection: """

Tests/HtmlDumperTest.php

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -52,19 +52,19 @@ public function testGet()
5252
$this->assertStringMatchesFormat(
5353
<<<EOTXT
5454
<foo></foo><bar><span class=sf-dump-note>array:25</span> [<samp>
55-
"<span class=sf-dump-meta>number</span>" => <span class=sf-dump-num>1</span>
56-
<span class=sf-dump-meta>0</span> => <a class=sf-dump-ref href=#{$dumpId}-ref01 title="2 occurrences">&amp;1</a> <span class=sf-dump-const>null</span>
57-
"<span class=sf-dump-meta>const</span>" => <span class=sf-dump-num>1.1</span>
58-
<span class=sf-dump-meta>1</span> => <span class=sf-dump-const>true</span>
59-
<span class=sf-dump-meta>2</span> => <span class=sf-dump-const>false</span>
60-
<span class=sf-dump-meta>3</span> => <span class=sf-dump-num>NAN</span>
61-
<span class=sf-dump-meta>4</span> => <span class=sf-dump-num>INF</span>
62-
<span class=sf-dump-meta>5</span> => <span class=sf-dump-num>-INF</span>
63-
<span class=sf-dump-meta>6</span> => <span class=sf-dump-num>{$intMax}</span>
64-
"<span class=sf-dump-meta>str</span>" => "<span class=sf-dump-str title="4 characters">d&#233;j&#224;</span>"
65-
<span class=sf-dump-meta>7</span> => b"<span class=sf-dump-str title="2 binary or non-UTF-8 characters">&#233;<span class=sf-dump-cchr title=\\x00>@</span></span>"
66-
"<span class=sf-dump-meta>[]</span>" => []
67-
"<span class=sf-dump-meta>res</span>" => <abbr title="`stream` resource" class=sf-dump-note>:stream</abbr> {<a class=sf-dump-solo-ref>@{$res1}</a><samp>
55+
"<span class=sf-dump-key>number</span>" => <span class=sf-dump-num>1</span>
56+
<span class=sf-dump-key>0</span> => <a class=sf-dump-ref href=#{$dumpId}-ref01 title="2 occurrences">&amp;1</a> <span class=sf-dump-const>null</span>
57+
"<span class=sf-dump-key>const</span>" => <span class=sf-dump-num>1.1</span>
58+
<span class=sf-dump-key>1</span> => <span class=sf-dump-const>true</span>
59+
<span class=sf-dump-key>2</span> => <span class=sf-dump-const>false</span>
60+
<span class=sf-dump-key>3</span> => <span class=sf-dump-num>NAN</span>
61+
<span class=sf-dump-key>4</span> => <span class=sf-dump-num>INF</span>
62+
<span class=sf-dump-key>5</span> => <span class=sf-dump-num>-INF</span>
63+
<span class=sf-dump-key>6</span> => <span class=sf-dump-num>{$intMax}</span>
64+
"<span class=sf-dump-key>str</span>" => "<span class=sf-dump-str title="4 characters">d&#233;j&#224;</span>"
65+
<span class=sf-dump-key>7</span> => b"<span class=sf-dump-str title="2 binary or non-UTF-8 characters">&#233;<span class=sf-dump-cchr title=\\x00>@</span></span>"
66+
"<span class=sf-dump-key>[]</span>" => []
67+
"<span class=sf-dump-key>res</span>" => <abbr title="`stream` resource" class=sf-dump-note>:stream</abbr> {<a class=sf-dump-solo-ref>@{$res1}</a><samp>
6868
<span class=sf-dump-meta>wrapper_type</span>: "<span class=sf-dump-str title="9 characters">plainfile</span>"
6969
<span class=sf-dump-meta>stream_type</span>: "<span class=sf-dump-str title="5 characters">STDIO</span>"
7070
<span class=sf-dump-meta>mode</span>: "<span class=sf-dump-str>r</span>"
@@ -75,12 +75,12 @@ public function testGet()
7575
<span class=sf-dump-meta>eof</span>: <span class=sf-dump-const>false</span>
7676
<span class=sf-dump-meta>options</span>: []
7777
</samp>}
78-
<span class=sf-dump-meta>8</span> => <abbr title="`Unknown` resource" class=sf-dump-note>:Unknown</abbr> {<a class=sf-dump-solo-ref>@{$res2}</a>}
79-
"<span class=sf-dump-meta>obj</span>" => <abbr title="Symfony\Component\VarDumper\Tests\Fixture\DumbFoo" class=sf-dump-note>DumbFoo</abbr> {<a class=sf-dump-ref href=#{$dumpId}-ref2%d title="2 occurrences">#%d</a><samp id={$dumpId}-ref2%d>
80-
<span class=sf-dump-public>foo</span>: "<span class=sf-dump-str title="3 characters">foo</span>"
81-
"<span class=sf-dump-public title="Runtime added dynamic property">bar</span>": "<span class=sf-dump-str title="3 characters">bar</span>"
78+
<span class=sf-dump-key>8</span> => <abbr title="`Unknown` resource" class=sf-dump-note>:Unknown</abbr> {<a class=sf-dump-solo-ref>@{$res2}</a>}
79+
"<span class=sf-dump-key>obj</span>" => <abbr title="Symfony\Component\VarDumper\Tests\Fixture\DumbFoo" class=sf-dump-note>DumbFoo</abbr> {<a class=sf-dump-ref href=#{$dumpId}-ref2%d title="2 occurrences">#%d</a><samp id={$dumpId}-ref2%d>
80+
+<span class=sf-dump-public title="Public property">foo</span>: "<span class=sf-dump-str title="3 characters">foo</span>"
81+
+"<span class=sf-dump-public title="Runtime added dynamic property">bar</span>": "<span class=sf-dump-str title="3 characters">bar</span>"
8282
</samp>}
83-
"<span class=sf-dump-meta>closure</span>" => <span class=sf-dump-note>Closure</span> {<a class=sf-dump-solo-ref>#%d</a><samp>
83+
"<span class=sf-dump-key>closure</span>" => <span class=sf-dump-note>Closure</span> {<a class=sf-dump-solo-ref>#%d</a><samp>
8484
<span class=sf-dump-meta>reflection</span>: """
8585
<span class=sf-dump-str title="%d characters">Closure [ &lt;user&gt; {$closureLabel} Symfony\Component\VarDumper\Tests\Fixture\{closure} ] {</span>
8686
<span class=sf-dump-str title="%d characters"> @@ {$var['file']} {$var['line']} - {$var['line']}</span>
@@ -92,19 +92,19 @@ public function testGet()
9292
<span class=sf-dump-str title="%d characters">}</span>
9393
"""
9494
</samp>}
95-
"<span class=sf-dump-meta>line</span>" => <span class=sf-dump-num>{$var['line']}</span>
96-
"<span class=sf-dump-meta>nobj</span>" => <span class=sf-dump-note>array:1</span> [<samp>
97-
<span class=sf-dump-meta>0</span> => <a class=sf-dump-ref href=#{$dumpId}-ref03 title="2 occurrences">&amp;3</a> {<a class=sf-dump-ref href=#{$dumpId}-ref2%d title="3 occurrences">#%d</a>}
95+
"<span class=sf-dump-key>line</span>" => <span class=sf-dump-num>{$var['line']}</span>
96+
"<span class=sf-dump-key>nobj</span>" => <span class=sf-dump-note>array:1</span> [<samp>
97+
<span class=sf-dump-index>0</span> => <a class=sf-dump-ref href=#{$dumpId}-ref03 title="2 occurrences">&amp;3</a> {<a class=sf-dump-ref href=#{$dumpId}-ref2%d title="3 occurrences">#%d</a>}
9898
</samp>]
99-
"<span class=sf-dump-meta>recurs</span>" => <a class=sf-dump-ref href=#{$dumpId}-ref04 title="2 occurrences">&amp;4</a> <span class=sf-dump-note>array:1</span> [<samp id={$dumpId}-ref04>
100-
<span class=sf-dump-meta>0</span> => <a class=sf-dump-ref href=#{$dumpId}-ref04 title="2 occurrences">&amp;4</a> <span class=sf-dump-note>array:1</span> [<a class=sf-dump-ref href=#{$dumpId}-ref04 title="2 occurrences">&amp;4</a>]
99+
"<span class=sf-dump-key>recurs</span>" => <a class=sf-dump-ref href=#{$dumpId}-ref04 title="2 occurrences">&amp;4</a> <span class=sf-dump-note>array:1</span> [<samp id={$dumpId}-ref04>
100+
<span class=sf-dump-index>0</span> => <a class=sf-dump-ref href=#{$dumpId}-ref04 title="2 occurrences">&amp;4</a> <span class=sf-dump-note>array:1</span> [<a class=sf-dump-ref href=#{$dumpId}-ref04 title="2 occurrences">&amp;4</a>]
101101
</samp>]
102-
<span class=sf-dump-meta>9</span> => <a class=sf-dump-ref href=#{$dumpId}-ref01 title="2 occurrences">&amp;1</a> <span class=sf-dump-const>null</span>
103-
"<span class=sf-dump-meta>sobj</span>" => <abbr title="Symfony\Component\VarDumper\Tests\Fixture\DumbFoo" class=sf-dump-note>DumbFoo</abbr> {<a class=sf-dump-ref href=#{$dumpId}-ref2%d title="2 occurrences">#%d</a>}
104-
"<span class=sf-dump-meta>snobj</span>" => <a class=sf-dump-ref href=#{$dumpId}-ref03 title="2 occurrences">&amp;3</a> {<a class=sf-dump-ref href=#{$dumpId}-ref2%d title="3 occurrences">#%d</a>}
105-
"<span class=sf-dump-meta>snobj2</span>" => {<a class=sf-dump-ref href=#{$dumpId}-ref2%d title="3 occurrences">#%d</a>}
106-
"<span class=sf-dump-meta>file</span>" => "<span class=sf-dump-str title="%d characters">{$var['file']}</span>"
107-
b"<span class=sf-dump-meta>bin-key-&#233;</span>" => ""
102+
<span class=sf-dump-key>9</span> => <a class=sf-dump-ref href=#{$dumpId}-ref01 title="2 occurrences">&amp;1</a> <span class=sf-dump-const>null</span>
103+
"<span class=sf-dump-key>sobj</span>" => <abbr title="Symfony\Component\VarDumper\Tests\Fixture\DumbFoo" class=sf-dump-note>DumbFoo</abbr> {<a class=sf-dump-ref href=#{$dumpId}-ref2%d title="2 occurrences">#%d</a>}
104+
"<span class=sf-dump-key>snobj</span>" => <a class=sf-dump-ref href=#{$dumpId}-ref03 title="2 occurrences">&amp;3</a> {<a class=sf-dump-ref href=#{$dumpId}-ref2%d title="3 occurrences">#%d</a>}
105+
"<span class=sf-dump-key>snobj2</span>" => {<a class=sf-dump-ref href=#{$dumpId}-ref2%d title="3 occurrences">#%d</a>}
106+
"<span class=sf-dump-key>file</span>" => "<span class=sf-dump-str title="%d characters">{$var['file']}</span>"
107+
b"<span class=sf-dump-key>bin-key-&#233;</span>" => ""
108108
</samp>]
109109
</bar>
110110

0 commit comments

Comments
 (0)