mirror of
https://github.com/phabelio/PHP-Parser.git
synced 2024-11-27 12:35:05 +01:00
a0c216bf4b
Adding this as an option to avoid breaking people's tests. Some of the test results show pretty clearly that we are incorrectly assigning the same comment multiple times for nested nodes (mentioned in #36).
77 lines
2.2 KiB
PHP
77 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace PhpParser;
|
|
|
|
class NodeDumper
|
|
{
|
|
private $dumpComments;
|
|
|
|
/**
|
|
* Constructs a NodeDumper.
|
|
*
|
|
* @param array $options Boolean option 'dumpComments' controls whether comments should be
|
|
* dumped
|
|
*/
|
|
public function __construct(array $options = []) {
|
|
$this->dumpComments = !empty($options['dumpComments']);
|
|
}
|
|
|
|
/**
|
|
* Dumps a node or array.
|
|
*
|
|
* @param array|Node $node Node or array to dump
|
|
*
|
|
* @return string Dumped value
|
|
*/
|
|
public function dump($node) {
|
|
if ($node instanceof Node) {
|
|
$r = $node->getType() . '(';
|
|
|
|
foreach ($node->getSubNodeNames() as $key) {
|
|
$r .= "\n " . $key . ': ';
|
|
|
|
$value = $node->$key;
|
|
if (null === $value) {
|
|
$r .= 'null';
|
|
} elseif (false === $value) {
|
|
$r .= 'false';
|
|
} elseif (true === $value) {
|
|
$r .= 'true';
|
|
} elseif (is_scalar($value)) {
|
|
$r .= $value;
|
|
} else {
|
|
$r .= str_replace("\n", "\n ", $this->dump($value));
|
|
}
|
|
}
|
|
|
|
if ($this->dumpComments && $comments = $node->getAttribute('comments')) {
|
|
$r .= "\n comments: " . str_replace("\n", "\n ", $this->dump($comments));
|
|
}
|
|
} elseif (is_array($node)) {
|
|
$r = 'array(';
|
|
|
|
foreach ($node as $key => $value) {
|
|
$r .= "\n " . $key . ': ';
|
|
|
|
if (null === $value) {
|
|
$r .= 'null';
|
|
} elseif (false === $value) {
|
|
$r .= 'false';
|
|
} elseif (true === $value) {
|
|
$r .= 'true';
|
|
} elseif (is_scalar($value)) {
|
|
$r .= $value;
|
|
} else {
|
|
$r .= str_replace("\n", "\n ", $this->dump($value));
|
|
}
|
|
}
|
|
} elseif ($node instanceof Comment) {
|
|
return $node->getReformattedText();
|
|
} else {
|
|
throw new \InvalidArgumentException('Can only dump nodes and arrays.');
|
|
}
|
|
|
|
return $r . "\n)";
|
|
}
|
|
}
|