Skip to content

Commit dba5009

Browse files
committed
Dumper: hidden values are rendered with variable's type [Closes #380]
1 parent be4f4ac commit dba5009

File tree

2 files changed

+30
-18
lines changed

2 files changed

+30
-18
lines changed

src/Tracy/Dumper/Dumper.php

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -297,10 +297,13 @@ private function dumpArray(&$var, array $options, int $level): string
297297
$out = $span . '>' . $out . count($var) . ")</span>\n" . '<div' . ($collapsed ? ' class="tracy-collapsed"' : '') . '>';
298298
$options['parents'][] = $var;
299299
foreach ($var as $k => &$v) {
300-
$hide = is_string($k) && isset($this->keysToHide[strtolower($k)]) ? self::HIDDEN_VALUE : null;
300+
$hide = is_string($k) && isset($this->keysToHide[strtolower($k)]);
301301
$out .= '<span class="tracy-dump-indent"> ' . str_repeat('| ', $level) . '</span>'
302302
. '<span class="tracy-dump-key">' . Helpers::escapeHtml($this->encodeKey($k)) . '</span> => '
303-
. ($hide ? $this->dumpString($hide) : $this->dumpVar($v, $options, $level + 1));
303+
. ($hide
304+
? Helpers::escapeHtml(self::hideValue($v)) . "\n"
305+
: $this->dumpVar($v, $options, $level + 1)
306+
);
304307
}
305308
array_pop($options['parents']);
306309

@@ -361,10 +364,13 @@ private function dumpObject(&$var, array $options, int $level): string
361364
$vis = ' <span class="tracy-dump-visibility">' . ($k[1] === '*' ? 'protected' : 'private') . '</span>';
362365
$k = substr($k, strrpos($k, "\x00") + 1);
363366
}
364-
$hide = is_string($k) && isset($this->keysToHide[strtolower($k)]) ? self::HIDDEN_VALUE : null;
367+
$hide = is_string($k) && isset($this->keysToHide[strtolower($k)]);
365368
$out .= '<span class="tracy-dump-indent"> ' . str_repeat('| ', $level) . '</span>'
366369
. '<span class="tracy-dump-key">' . Helpers::escapeHtml($this->encodeKey($k)) . "</span>$vis => "
367-
. ($hide ? $this->dumpString($hide) : $this->dumpVar($v, $options, $level + 1));
370+
. ($hide
371+
? Helpers::escapeHtml(self::hideValue($v)) . "\n"
372+
: $this->dumpVar($v, $options, $level + 1)
373+
);
368374
}
369375
array_pop($options['parents']);
370376

@@ -419,7 +425,7 @@ private function toJson(&$var, array $options = [], int $level = 0)
419425
$options['parents'][] = $var;
420426
foreach ($var as $k => &$v) {
421427
$hide = is_string($k) && isset($this->keysToHide[strtolower($k)]);
422-
$res[] = [$this->encodeKey($k), $hide ? self::HIDDEN_VALUE : $this->toJson($v, $options, $level + 1)];
428+
$res[] = [$this->encodeKey($k), $hide ? ['type' => self::hideValue($v)] : $this->toJson($v, $options, $level + 1)];
423429
}
424430
array_pop($options['parents']);
425431
return $res;
@@ -456,7 +462,7 @@ private function toJson(&$var, array $options = [], int $level = 0)
456462
$k = substr($k, strrpos($k, "\x00") + 1);
457463
}
458464
$hide = is_string($k) && isset($this->keysToHide[strtolower($k)]);
459-
$obj['items'][] = [$this->encodeKey($k), $hide ? self::HIDDEN_VALUE : $this->toJson($v, $options, $level + 1), $vis];
465+
$obj['items'][] = [$this->encodeKey($k), $hide ? ['type' => self::hideValue($v)] : $this->toJson($v, $options, $level + 1), $vis];
460466
}
461467
}
462468
return ['object' => $obj['id']];
@@ -619,6 +625,12 @@ private static function exportPhpIncompleteClass(\__PHP_Incomplete_Class $obj):
619625
}
620626

621627

628+
private static function hideValue($var): string
629+
{
630+
return self::HIDDEN_VALUE . ' (' . (is_object($var) ? Helpers::getClass($var) : gettype($var)) . ')';
631+
}
632+
633+
622634
/**
623635
* Finds the location where dump was called. Returns [file, line, code]
624636
*/

tests/Tracy/Dumper.keysToHide.phpt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ $obj = (object) [
2626

2727
Assert::match('stdClass #%a%
2828
a => 456
29-
password => "*****" (5)
30-
PASSWORD => "*****" (5)
31-
Pin => "*****" (5)
29+
password => ***** (string)
30+
PASSWORD => ***** (string)
31+
Pin => ***** (string)
3232
inner => array (4)
3333
| a => 123
34-
| password => "*****" (5)
35-
| PASSWORD => "*****" (5)
36-
| Pin => "*****" (5)
34+
| password => ***** (string)
35+
| PASSWORD => ***** (string)
36+
| Pin => ***** (string)
3737
', Dumper::toText($obj, [Dumper::KEYS_TO_HIDE => ['password', 'PIN']]));
3838

3939

@@ -49,16 +49,16 @@ Assert::equal([
4949
'hash' => Expect::match('%h%'),
5050
'items' => [
5151
['a', 456, 0],
52-
['password', '*****', 0],
53-
['PASSWORD', '*****', 0],
54-
['Pin', '*****', 0],
52+
['password', ['type' => '***** (string)'], 0],
53+
['PASSWORD', ['type' => '***** (string)'], 0],
54+
['Pin', ['type' => '***** (string)'], 0],
5555
[
5656
'inner',
5757
[
5858
['a', 123],
59-
['password', '*****'],
60-
['PASSWORD', '*****'],
61-
['Pin', '*****'],
59+
['password', ['type' => '***** (string)']],
60+
['PASSWORD', ['type' => '***** (string)']],
61+
['Pin', ['type' => '***** (string)']],
6262
],
6363
0,
6464
],

0 commit comments

Comments
 (0)