Skip to content

Commit dce1c96

Browse files
authored
Merge pull request #784 from wouterj/node-renderer-factory-perf
Cache matching node renderers
2 parents 3d82114 + cbf0744 commit dce1c96

23 files changed

+80
-43
lines changed

packages/guides-restructured-text/src/RestructuredText/NodeRenderers/Html/AdmonitionNodeRenderer.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use phpDocumentor\Guides\TemplateRenderer;
2222

2323
use function implode;
24+
use function is_a;
2425

2526
/** @implements NodeRenderer<AdmonitionNode> */
2627
class AdmonitionNodeRenderer implements NodeRenderer
@@ -29,9 +30,9 @@ public function __construct(private readonly TemplateRenderer $renderer)
2930
{
3031
}
3132

32-
public function supports(Node $node): bool
33+
public function supports(string $nodeFqcn): bool
3334
{
34-
return $node instanceof AdmonitionNode;
35+
return $nodeFqcn === AdmonitionNode::class || is_a($nodeFqcn, AdmonitionNode::class, true);
3536
}
3637

3738
public function render(Node $node, RenderContext $renderContext): string

packages/guides-restructured-text/src/RestructuredText/NodeRenderers/Html/CollectionNodeRenderer.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,18 @@
2020
use phpDocumentor\Guides\RenderContext;
2121
use phpDocumentor\Guides\TemplateRenderer;
2222

23+
use function is_a;
24+
2325
/** @implements NodeRenderer<CollectionNode> */
2426
final class CollectionNodeRenderer implements NodeRenderer
2527
{
2628
public function __construct(private readonly TemplateRenderer $renderer)
2729
{
2830
}
2931

30-
public function supports(Node $node): bool
32+
public function supports(string $nodeFqcn): bool
3133
{
32-
return $node instanceof CollectionNode;
34+
return $nodeFqcn === CollectionNode::class || is_a($nodeFqcn, CollectionNode::class, true);
3335
}
3436

3537
public function render(Node $node, RenderContext $renderContext): string

packages/guides-restructured-text/src/RestructuredText/NodeRenderers/Html/ContainerNodeRenderer.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,18 @@
2020
use phpDocumentor\Guides\RestructuredText\Nodes\ContainerNode;
2121
use phpDocumentor\Guides\TemplateRenderer;
2222

23+
use function is_a;
24+
2325
/** @implements NodeRenderer<ContainerNode> */
2426
final class ContainerNodeRenderer implements NodeRenderer
2527
{
2628
public function __construct(private readonly TemplateRenderer $renderer)
2729
{
2830
}
2931

30-
public function supports(Node $node): bool
32+
public function supports(string $nodeFqcn): bool
3133
{
32-
return $node instanceof ContainerNode;
34+
return $nodeFqcn === ContainerNode::class || is_a($nodeFqcn, ContainerNode::class, true);
3335
}
3436

3537
public function render(Node $node, RenderContext $renderContext): string

packages/guides-restructured-text/src/RestructuredText/NodeRenderers/Html/GeneralDirectiveNodeRenderer.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use phpDocumentor\Guides\TemplateRenderer;
2222
use Psr\Log\LoggerInterface;
2323

24+
use function is_a;
2425
use function preg_replace;
2526
use function sprintf;
2627
use function str_replace;
@@ -34,9 +35,9 @@ public function __construct(
3435
) {
3536
}
3637

37-
public function supports(Node $node): bool
38+
public function supports(string $nodeFqcn): bool
3839
{
39-
return $node instanceof GeneralDirectiveNode;
40+
return $nodeFqcn === GeneralDirectiveNode::class || is_a($nodeFqcn, GeneralDirectiveNode::class, true);
4041
}
4142

4243
public function render(Node $node, RenderContext $renderContext): string

packages/guides-restructured-text/src/RestructuredText/NodeRenderers/Html/SidebarNodeRenderer.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,18 @@
2020
use phpDocumentor\Guides\RestructuredText\Nodes\SidebarNode;
2121
use phpDocumentor\Guides\TemplateRenderer;
2222

23+
use function is_a;
24+
2325
/** @implements NodeRenderer<SidebarNode> */
2426
final class SidebarNodeRenderer implements NodeRenderer
2527
{
2628
public function __construct(private readonly TemplateRenderer $renderer)
2729
{
2830
}
2931

30-
public function supports(Node $node): bool
32+
public function supports(string $nodeFqcn): bool
3133
{
32-
return $node instanceof SidebarNode;
34+
return $nodeFqcn === SidebarNode::class || is_a($nodeFqcn, SidebarNode::class, true);
3335
}
3436

3537
public function render(Node $node, RenderContext $renderContext): string

packages/guides-restructured-text/src/RestructuredText/NodeRenderers/Html/TopicNodeRenderer.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,18 @@
2121
use phpDocumentor\Guides\RestructuredText\Nodes\TopicNode;
2222
use phpDocumentor\Guides\TemplateRenderer;
2323

24+
use function is_a;
25+
2426
/** @implements NodeRenderer<TocNode> */
2527
final class TopicNodeRenderer implements NodeRenderer
2628
{
2729
public function __construct(private readonly TemplateRenderer $renderer)
2830
{
2931
}
3032

31-
public function supports(Node $node): bool
33+
public function supports(string $nodeFqcn): bool
3234
{
33-
return $node instanceof TopicNode;
35+
return $nodeFqcn === TopicNode::class || is_a($nodeFqcn, TopicNode::class, true);
3436
}
3537

3638
public function render(Node $node, RenderContext $renderContext): string

packages/guides-restructured-text/src/RestructuredText/NodeRenderers/LaTeX/GeneralDirectiveNodeRenderer.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use phpDocumentor\Guides\TemplateRenderer;
2222
use Psr\Log\LoggerInterface;
2323

24+
use function is_a;
2425
use function preg_replace;
2526
use function sprintf;
2627
use function str_replace;
@@ -34,9 +35,9 @@ public function __construct(
3435
) {
3536
}
3637

37-
public function supports(Node $node): bool
38+
public function supports(string $nodeFqcn): bool
3839
{
39-
return $node instanceof GeneralDirectiveNode;
40+
return $nodeFqcn === GeneralDirectiveNode::class || is_a($nodeFqcn, GeneralDirectiveNode::class, true);
4041
}
4142

4243
public function render(Node $node, RenderContext $renderContext): string

packages/guides/src/NodeRenderers/DefaultNodeRenderer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public function render(Node $node, RenderContext $renderContext): string
7474
return '';
7575
}
7676

77-
public function supports(Node $node): bool
77+
public function supports(string $nodeFqcn): bool
7878
{
7979
return true;
8080
}

packages/guides/src/NodeRenderers/DelegatingNodeRenderer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public function setNodeRendererFactory(NodeRendererFactory $nodeRendererFactory)
2121
$this->nodeRendererFactory = $nodeRendererFactory;
2222
}
2323

24-
public function supports(Node $node): bool
24+
public function supports(string $nodeFqcn): bool
2525
{
2626
return true;
2727
}

packages/guides/src/NodeRenderers/Html/BreadCrumbNodeRenderer.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
use function array_reverse;
1616
use function assert;
17+
use function is_a;
1718

1819
/**
1920
* @template T as Node
@@ -28,9 +29,9 @@ public function __construct(
2829
) {
2930
}
3031

31-
public function supports(Node $node): bool
32+
public function supports(string $nodeFqcn): bool
3233
{
33-
return $node instanceof BreadCrumbNode;
34+
return $nodeFqcn === BreadCrumbNode::class || is_a($nodeFqcn, BreadCrumbNode::class, true);
3435
}
3536

3637
/** @param T $node */

0 commit comments

Comments
 (0)