DisallowedRawHtmlRenderer::render()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 17
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 3.0123

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 17
ccs 8
cts 9
cp 0.8889
rs 10
c 0
b 0
f 0
cc 3
nc 3
nop 2
crap 3.0123
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the league/commonmark package.
7
 *
8
 * (c) Colin O'Dell <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace League\CommonMark\Extension\DisallowedRawHtml;
15
16
use League\CommonMark\Node\Node;
17
use League\CommonMark\Renderer\ChildNodeRendererInterface;
18
use League\CommonMark\Renderer\NodeRendererInterface;
19
use League\Config\ConfigurationAwareInterface;
20
use League\Config\ConfigurationInterface;
21
22
final class DisallowedRawHtmlRenderer implements NodeRendererInterface, ConfigurationAwareInterface
23
{
24
    /** @psalm-readonly */
25
    private NodeRendererInterface $innerRenderer;
26
27
    /** @psalm-readonly-allow-private-mutation */
28
    private ConfigurationInterface $config;
29
30 154
    public function __construct(NodeRendererInterface $innerRenderer)
31
    {
32 154
        $this->innerRenderer = $innerRenderer;
33
    }
34
35 64
    public function render(Node $node, ChildNodeRendererInterface $childRenderer): ?string
36
    {
37 64
        $rendered = (string) $this->innerRenderer->render($node, $childRenderer);
38
39 64
        if ($rendered === '') {
40 2
            return '';
41
        }
42
43 62
        $tags = (array) $this->config->get('disallowed_raw_html/disallowed_tags');
44 62
        if (\count($tags) === 0) {
45
            return $rendered;
46
        }
47
48 62
        $regex = \sprintf('/<(\/?(?:%s)[ \/>])/i', \implode('|', \array_map('preg_quote', $tags)));
49
50
        // Match these types of tags: <title> </title> <title x="sdf"> <title/> <title />
51 62
        return \preg_replace($regex, '&lt;$1', $rendered);
52
    }
53
54 154
    public function setConfiguration(ConfigurationInterface $configuration): void
55
    {
56 154
        $this->config = $configuration;
57
58 154
        if ($this->innerRenderer instanceof ConfigurationAwareInterface) {
59 96
            $this->innerRenderer->setConfiguration($configuration);
0 ignored issues
show
Bug introduced by
The method setConfiguration() does not exist on League\CommonMark\Renderer\NodeRendererInterface. It seems like you code against a sub-type of League\CommonMark\Renderer\NodeRendererInterface such as League\CommonMark\Extens...sallowedRawHtmlRenderer or League\CommonMark\Extens...line\HtmlInlineRenderer or League\CommonMark\Renderer\Inline\NewlineRenderer or League\CommonMark\Extens...Block\HtmlBlockRenderer or League\CommonMark\Tests\...\FakeInjectableRenderer or League\CommonMark\Extens...rer\Inline\LinkRenderer or League\CommonMark\Extens...eadingPermalinkRenderer or League\CommonMark\Extens...er\Inline\ImageRenderer or League\CommonMark\Extens...FootnoteBackrefRenderer or League\CommonMark\Extens...rer\FootnoteRefRenderer or League\CommonMark\Extens...otnoteContainerRenderer or League\CommonMark\Extens...nderer\FootnoteRenderer. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

59
            $this->innerRenderer->/** @scrutinizer ignore-call */ 
60
                                  setConfiguration($configuration);
Loading history...
60
        }
61
    }
62
}
63