Skip to content

Commit caf4b09

Browse files
committed
Improve code style of menu pass
(cherry picked from commit a4b8b28)
1 parent 451c53b commit caf4b09

File tree

3 files changed

+43
-30
lines changed

3 files changed

+43
-30
lines changed

packages/guides/src/Compiler/Passes/GlobalMenuPass.php

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use phpDocumentor\Guides\Compiler\CompilerPass;
1818
use phpDocumentor\Guides\Nodes\DocumentNode;
1919
use phpDocumentor\Guides\Nodes\DocumentTree\DocumentEntryNode;
20+
use phpDocumentor\Guides\Nodes\DocumentTree\EntryNode;
2021
use phpDocumentor\Guides\Nodes\DocumentTree\ExternalEntryNode;
2122
use phpDocumentor\Guides\Nodes\Menu\ExternalMenuEntryNode;
2223
use phpDocumentor\Guides\Nodes\Menu\InternalMenuEntryNode;
@@ -118,10 +119,11 @@ private function getMenuEntryWithChildren(CompilerContext $compilerContext, Menu
118119
return $newMenuEntry;
119120
}
120121

122+
/** @param EntryNode<DocumentEntryNode|ExternalEntryNode>|ExternalEntryNode $entryNode */
121123
private function addSubEntries(
122124
CompilerContext $compilerContext,
123125
MenuEntryNode $sectionMenuEntry,
124-
DocumentEntryNode|ExternalEntryNode $entryNode,
126+
EntryNode $entryNode,
125127
int $currentLevel,
126128
int $maxDepth,
127129
): void {
@@ -138,26 +140,40 @@ private function addSubEntries(
138140
}
139141

140142
foreach ($entryNode->getMenuEntries() as $subEntryNode) {
141-
if ($subEntryNode instanceof DocumentEntryNode) {
142-
$subMenuEntry = new InternalMenuEntryNode(
143-
$subEntryNode->getFile(),
144-
$subEntryNode->getTitle(),
145-
[],
146-
false,
147-
$currentLevel,
148-
'',
149-
);
150-
$sectionMenuEntry->addMenuEntry($subMenuEntry);
151-
$this->addSubEntries($compilerContext, $subMenuEntry, $subEntryNode, $currentLevel + 1, $maxDepth);
152-
} elseif ($subEntryNode instanceof ExternalEntryNode) {
153-
$subMenuEntry = new ExternalMenuEntryNode(
154-
$subEntryNode->getValue(),
155-
TitleNode::fromString($subEntryNode->getTitle()),
156-
$currentLevel,
157-
);
158-
$sectionMenuEntry->addMenuEntry($subMenuEntry);
159-
$this->addSubEntries($compilerContext, $subMenuEntry, $subEntryNode, $currentLevel + 1, $maxDepth);
160-
}
143+
$subMenuEntry = match ($subEntryNode::class) {
144+
DocumentEntryNode::class => $this->createInternalMenuEntry($subEntryNode, $currentLevel),
145+
ExternalEntryNode::class => $this->createExternalMenuEntry($subEntryNode, $currentLevel),
146+
};
147+
148+
$sectionMenuEntry->addMenuEntry($subMenuEntry);
149+
$this->addSubEntries(
150+
$compilerContext,
151+
$subMenuEntry,
152+
$subEntryNode,
153+
$currentLevel + 1,
154+
$maxDepth,
155+
);
161156
}
162157
}
158+
159+
private function createInternalMenuEntry(DocumentEntryNode $subEntryNode, int $currentLevel): InternalMenuEntryNode
160+
{
161+
return new InternalMenuEntryNode(
162+
$subEntryNode->getFile(),
163+
$subEntryNode->getTitle(),
164+
[],
165+
false,
166+
$currentLevel,
167+
'',
168+
);
169+
}
170+
171+
private function createExternalMenuEntry(ExternalEntryNode $subEntryNode, int $currentLevel): ExternalMenuEntryNode
172+
{
173+
return new ExternalMenuEntryNode(
174+
$subEntryNode->getValue(),
175+
TitleNode::fromString($subEntryNode->getTitle()),
176+
$currentLevel,
177+
);
178+
}
163179
}

packages/guides/src/Nodes/DocumentTree/DocumentEntryNode.php

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@
1313

1414
namespace phpDocumentor\Guides\Nodes\DocumentTree;
1515

16-
use phpDocumentor\Guides\Nodes\DocumentNode;
1716
use phpDocumentor\Guides\Nodes\TitleNode;
1817

19-
/** @extends EntryNode<DocumentNode> */
18+
use function array_filter;
19+
use function array_values;
20+
21+
/** @extends EntryNode<DocumentEntryNode|ExternalEntryNode> */
2022
final class DocumentEntryNode extends EntryNode
2123
{
2224
/** @var array<DocumentEntryNode|ExternalEntryNode> */
@@ -41,21 +43,18 @@ public function addChild(DocumentEntryNode|ExternalEntryNode $child): void
4143
$this->entries[] = $child;
4244
}
4345

44-
/**
45-
* @return array<DocumentEntryNode>
46-
*/
46+
/** @return array<DocumentEntryNode> */
4747
public function getChildren(): array
4848
{
4949
// Filter the entries array to only include DocumentEntryNode instances
50-
$documentEntries = array_filter($this->entries, function ($entry) {
50+
$documentEntries = array_filter($this->entries, static function ($entry) {
5151
return $entry instanceof DocumentEntryNode;
5252
});
5353

5454
// Re-index the array to maintain numeric keys
5555
return array_values($documentEntries);
5656
}
5757

58-
5958
/** @return array<DocumentEntryNode|ExternalEntryNode> */
6059
public function getMenuEntries(): array
6160
{

packages/guides/src/Renderer/DocumentTreeIterator.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
use phpDocumentor\Guides\Nodes\DocumentTree\DocumentEntryNode;
1919
use RecursiveIterator;
2020

21-
use function array_filter;
22-
2321
/**
2422
* Iterates over the document tree and returns the documents in the table of contents order.
2523
*

0 commit comments

Comments
 (0)