From 8240bce3269a732d2f32f2413d04081c8f287693 Mon Sep 17 00:00:00 2001 From: "lina.wolf" Date: Sun, 16 Mar 2025 10:21:28 +0100 Subject: [PATCH] [BUGFIX] Ignore orphans in toctrees with globbing Orphans are by default not meant to be in menus. Therefore they must be excluded during globbing and can only be added to a menu if they are explicitely added. --- .../DocumentEntryRegistrationTransformer.php | 1 + .../MenuNodeTransformers/GlobMenuEntryNodeTransformer.php | 4 ++++ .../guides/src/Nodes/DocumentTree/DocumentEntryNode.php | 6 ++++++ .../automatic-default-menu/input/doNotInclude.rst | 6 ++++++ .../toctree/toctree-glob-level-1/input/doNotInclude.rst | 6 ++++++ 5 files changed, 23 insertions(+) create mode 100644 tests/Integration/tests-full/automatic_menu/automatic-default-menu/input/doNotInclude.rst create mode 100644 tests/Integration/tests/toctree/toctree-glob-level-1/input/doNotInclude.rst diff --git a/packages/guides/src/Compiler/NodeTransformers/DocumentEntryRegistrationTransformer.php b/packages/guides/src/Compiler/NodeTransformers/DocumentEntryRegistrationTransformer.php index 16ef5fed4..7f3d15216 100644 --- a/packages/guides/src/Compiler/NodeTransformers/DocumentEntryRegistrationTransformer.php +++ b/packages/guides/src/Compiler/NodeTransformers/DocumentEntryRegistrationTransformer.php @@ -66,6 +66,7 @@ public function leaveNode(Node $node, CompilerContextInterface $compilerContext) $node->getTitle() ?? TitleNode::emptyNode(), $node->isRoot(), $additionalData, + $node->isOrphan(), ); $compilerContext->getProjectNode()->addDocumentEntry($entry); diff --git a/packages/guides/src/Compiler/NodeTransformers/MenuNodeTransformers/GlobMenuEntryNodeTransformer.php b/packages/guides/src/Compiler/NodeTransformers/MenuNodeTransformers/GlobMenuEntryNodeTransformer.php index 5ed5fec51..d18d6c952 100644 --- a/packages/guides/src/Compiler/NodeTransformers/MenuNodeTransformers/GlobMenuEntryNodeTransformer.php +++ b/packages/guides/src/Compiler/NodeTransformers/MenuNodeTransformers/GlobMenuEntryNodeTransformer.php @@ -49,6 +49,10 @@ protected function handleMenuEntry(MenuNode $currentMenu, MenuEntryNode $entryNo $globExclude = explode(',', $currentMenu->getOption('globExclude') . ''); $menuEntries = []; foreach ($documentEntries as $documentEntry) { + if ($documentEntry->isOrphan()) { + continue; + } + if ( !self::matches($documentEntry->getFile(), $entryNode, $currentPath, $globExclude) ) { diff --git a/packages/guides/src/Nodes/DocumentTree/DocumentEntryNode.php b/packages/guides/src/Nodes/DocumentTree/DocumentEntryNode.php index 6dfac5ad5..715f9ca90 100644 --- a/packages/guides/src/Nodes/DocumentTree/DocumentEntryNode.php +++ b/packages/guides/src/Nodes/DocumentTree/DocumentEntryNode.php @@ -34,6 +34,7 @@ public function __construct( private readonly TitleNode $titleNode, private readonly bool $isRoot = false, private array $additionalData = [], + private bool $orphan = false, ) { } @@ -109,6 +110,11 @@ public function getAdditionalData(string $key): Node|null return $this->additionalData[$key] ?? null; } + public function isOrphan(): bool + { + return $this->orphan; + } + public function addAdditionalData(string $key, Node $value): void { $this->additionalData[$key] = $value; diff --git a/tests/Integration/tests-full/automatic_menu/automatic-default-menu/input/doNotInclude.rst b/tests/Integration/tests-full/automatic_menu/automatic-default-menu/input/doNotInclude.rst new file mode 100644 index 000000000..a513f2e2e --- /dev/null +++ b/tests/Integration/tests-full/automatic_menu/automatic-default-menu/input/doNotInclude.rst @@ -0,0 +1,6 @@ +:orphan: + +Do not Include in menu +====================== + +This is an orphan an must be ignored by glob patterns \ No newline at end of file diff --git a/tests/Integration/tests/toctree/toctree-glob-level-1/input/doNotInclude.rst b/tests/Integration/tests/toctree/toctree-glob-level-1/input/doNotInclude.rst new file mode 100644 index 000000000..a513f2e2e --- /dev/null +++ b/tests/Integration/tests/toctree/toctree-glob-level-1/input/doNotInclude.rst @@ -0,0 +1,6 @@ +:orphan: + +Do not Include in menu +====================== + +This is an orphan an must be ignored by glob patterns \ No newline at end of file