Skip to content

Commit a49a49b

Browse files
committed
[BUGFIX] Fix the DefaultNodeRenderer for array values
Up to now when the value of a node was an array (as for nodes replace and compound) there was an empty string returned in rendering. Added handling of array values (which fixes rendering of the replace directive) and added errrors in case a node that cannot be handled by the defaultnoderenderer is passed to it. Additionally I removed the superflous new lines in rendering of inline variables
1 parent 2b9500b commit a49a49b

File tree

6 files changed

+27
-6
lines changed

6 files changed

+27
-6
lines changed

packages/guides/resources/config/guides.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@
153153
->set(MenuEntryRenderer::class)
154154
->tag('phpdoc.guides.noderenderer.html')
155155

156+
->set(DefaultNodeRenderer::class)
157+
156158
->set(InMemoryNodeRendererFactory::class)
157159
->args([
158160
'$nodeRenderers' => tagged_iterator('phpdoc.guides.noderenderer.html'),
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
{{ renderNode(node.child) }}
1+
{% apply spaceless %}{{ renderNode(node.child) }}
2+
{% endapply %}

packages/guides/src/NodeRenderers/DefaultNodeRenderer.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,21 @@
1515

1616
use phpDocumentor\Guides\Nodes\Node;
1717
use phpDocumentor\Guides\RenderContext;
18+
use Psr\Log\LoggerInterface;
1819

1920
use function assert;
21+
use function is_array;
2022
use function is_string;
2123

2224
/** @implements NodeRenderer<Node> */
2325
class DefaultNodeRenderer implements NodeRenderer, NodeRendererFactoryAware
2426
{
2527
private NodeRendererFactory|null $nodeRendererFactory = null;
2628

29+
public function __construct(private readonly LoggerInterface $logger)
30+
{
31+
}
32+
2733
public function setNodeRendererFactory(NodeRendererFactory $nodeRendererFactory): void
2834
{
2935
$this->nodeRendererFactory = $nodeRendererFactory;
@@ -39,10 +45,25 @@ public function render(Node $node, RenderContext $renderContext): string
3945
return $this->nodeRendererFactory->get($value)->render($value, $renderContext);
4046
}
4147

48+
if (is_array($value)) {
49+
$returnValue = '';
50+
foreach ($value as $child) {
51+
if ($child instanceof Node) {
52+
$returnValue .= $this->render($child, $renderContext);
53+
} else {
54+
$this->logger->error('The default renderer cannot be applied to node ' . $node::class);
55+
}
56+
}
57+
58+
return $returnValue;
59+
}
60+
4261
if (is_string($value)) {
4362
return $value;
4463
}
4564

65+
$this->logger->error('The default renderer cannot be applied to node ' . $node::class);
66+
4667
return '';
4768
}
4869

tests/Integration/tests/variables-from-project/expected/index.html

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@
88
<div class="section" id="some-document">
99
<h1>Some Document</h1>
1010

11-
<p>Project My Project
12-
in version 3.14
13-
</p>
11+
<p>Project My Project in version 3.14</p>
1412
</div>
1513

1614
</body>

tests/Integration/tests/variables-replace/expected/index.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
<div class="section" id="document-title">
99
<h1>Document Title</h1>
1010

11-
<p>We are using ReStructuredText
12-
here.</p>
11+
<p>We are using ReStructuredText here.</p>
1312
</div>
1413

1514
</body>

tests/Integration/tests/variables-replace/input/skip

Whitespace-only changes.

0 commit comments

Comments
 (0)