Skip to content

Commit bad374c

Browse files
committed
-
1 parent 0c62abb commit bad374c

File tree

5 files changed

+36
-18
lines changed

5 files changed

+36
-18
lines changed

src/DocsKernel.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use SymfonyDocsBuilder\Listener\AdmonitionListener;
2121
use SymfonyDocsBuilder\Listener\AssetsCopyListener;
2222
use SymfonyDocsBuilder\Listener\CopyImagesListener;
23+
use SymfonyDocsBuilder\Listener\DuplicatedHeaderIdListener;
2324

2425
class DocsKernel extends Kernel
2526
{
@@ -49,6 +50,11 @@ private function initializeListeners(EventManager $eventManager, ErrorManager $e
4950
new AdmonitionListener()
5051
);
5152

53+
$eventManager->addEventListener(
54+
PreParseDocumentEvent::PRE_PARSE_DOCUMENT,
55+
new DuplicatedHeaderIdListener()
56+
);
57+
5258
$eventManager->addEventListener(
5359
PreNodeRenderEvent::PRE_NODE_RENDER,
5460
new CopyImagesListener($this->buildConfig, $errorManager)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/*
6+
* This file is part of the Docs Builder package.
7+
* (c) Ryan Weaver <ryan@symfonycasts.com>
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace SymfonyDocsBuilder\Listener;
13+
14+
use Doctrine\RST\Event\PreParseDocumentEvent;
15+
use SymfonyDocsBuilder\Renderers\TitleNodeRenderer;
16+
17+
final class DuplicatedHeaderIdListener
18+
{
19+
public function preParseDocument(PreParseDocumentEvent $event): void
20+
{
21+
// needed because we only need to handle duplicated headers within
22+
// the same file, not across all the files being generated
23+
TitleNodeRenderer::resetHeaderIdCache();
24+
}
25+
}

src/Renderers/TitleNodeRenderer.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ public function __construct(TitleNode $titleNode, TemplateRenderer $templateRend
3232
$this->templateRenderer = $templateRenderer;
3333
}
3434

35+
public static function resetHeaderIdCache(): void
36+
{
37+
self::$idUsagesCountByFilename = [];
38+
}
39+
3540
public function render(): string
3641
{
3742
$filename = $this->titleNode->getEnvironment()->getCurrentFileName();

tests/IntegrationTest.php

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

2222
class IntegrationTest extends AbstractIntegrationTest
2323
{
24-
public static function setUpBeforeClass(): void
25-
{
26-
$reflection = new \ReflectionClass(TitleNodeRenderer::class);
27-
$property = $reflection->getProperty('idUsagesCountByFilename');
28-
$property->setAccessible(true);
29-
30-
$property->setValue([]);
31-
}
32-
3324
/**
3425
* @dataProvider integrationProvider
3526
*/

tests/JsonIntegrationTest.php

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,6 @@
1414

1515
class JsonIntegrationTest extends AbstractIntegrationTest
1616
{
17-
public function setUp(): void
18-
{
19-
$reflection = new \ReflectionClass(TitleNodeRenderer::class);
20-
$property = $reflection->getProperty('idUsagesCountByFilename');
21-
$property->setAccessible(true);
22-
23-
$property->setValue([]);
24-
}
25-
2617
/**
2718
* @dataProvider getJsonTests
2819
*/

0 commit comments

Comments
 (0)