Skip to content

Commit 31b0b98

Browse files
authored
Merge pull request #980 from phpDocumentor/backport/972
Backport/972
2 parents 2938f8b + e8a578e commit 31b0b98

33 files changed

+240
-123
lines changed

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"php": "^8.1",
3737
"ext-json": "*",
3838
"ext-mbstring": "*",
39+
"doctrine/deprecations": "^1.1",
3940
"phpdocumentor/guides": "^1.0@dev || ^0.3",
4041
"phpdocumentor/guides-cli": "^1.0@dev || ^0.3",
4142
"phpdocumentor/guides-code": "^1.0@dev || ^0.3",

composer.lock

Lines changed: 50 additions & 49 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/guides/composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"php": "^8.1",
2525
"ext-json": "*",
2626
"ext-zlib": "*",
27+
"doctrine/deprecations": "^1.0",
2728
"league/flysystem": "^1.1",
2829
"league/tactician": "^1.1",
2930
"league/uri": "^6.5 || ^7.0",

packages/guides/src/Compiler/CompilerContext.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,41 @@
1313

1414
namespace phpDocumentor\Guides\Compiler;
1515

16+
use Doctrine\Deprecations\Deprecation;
1617
use Exception;
1718
use phpDocumentor\Guides\Compiler\ShadowTree\TreeNode;
1819
use phpDocumentor\Guides\Nodes\DocumentNode;
1920
use phpDocumentor\Guides\Nodes\Node;
2021
use phpDocumentor\Guides\Nodes\ProjectNode;
2122

22-
final class CompilerContext
23+
/**
24+
* Context class used in compiler passes to store the state of the nodes.
25+
*
26+
* The {@see Compiler} is making changes to the nodes in a {@see DocumentNode} as the nodes are immutable cannot
27+
* do this directly. This class helps to modify the nodes in the {@see DocumentNode} by creating a shadow tree.
28+
*
29+
* The class is final and should not be extended, if you need to provide more information to the compiler pass
30+
* you can use the {@see CompilerContextInterface} and decorate this class.
31+
*
32+
* @final
33+
*/
34+
class CompilerContext implements CompilerContextInterface
2335
{
2436
/** @var TreeNode<Node> */
2537
private TreeNode $shadowTree;
2638

2739
public function __construct(
2840
private readonly ProjectNode $projectNode,
2941
) {
42+
if (self::class === static::class) {
43+
return;
44+
}
45+
46+
Deprecation::trigger(
47+
'phpdocumentor/guides',
48+
'https://github.com/phpDocumentor/guides/issues/971',
49+
'Extending CompilerContext is deprecated, please use the CompilerContextInterface instead.',
50+
);
3051
}
3152

3253
public function getProjectNode(): ProjectNode
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* This file is part of phpDocumentor.
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*
11+
* @link https://phpdoc.org
12+
*/
13+
14+
namespace phpDocumentor\Guides\Compiler;
15+
16+
use phpDocumentor\Guides\Compiler\ShadowTree\TreeNode;
17+
use phpDocumentor\Guides\Nodes\DocumentNode;
18+
use phpDocumentor\Guides\Nodes\Node;
19+
use phpDocumentor\Guides\Nodes\ProjectNode;
20+
21+
interface CompilerContextInterface
22+
{
23+
public function getProjectNode(): ProjectNode;
24+
25+
public function getDocumentNode(): DocumentNode;
26+
27+
public function withDocumentShadowTree(DocumentNode $documentNode): self;
28+
29+
/** @param TreeNode<Node> $shadowTree */
30+
public function withShadowTree(TreeNode $shadowTree): self;
31+
32+
/** @return TreeNode<Node> */
33+
public function getShadowTree(): TreeNode;
34+
35+
/** @return array<string, string> */
36+
public function getLoggerInformation(): array;
37+
}

packages/guides/src/Compiler/NodeTransformers/CitationInlineNodeTransformer.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313

1414
namespace phpDocumentor\Guides\Compiler\NodeTransformers;
1515

16-
use phpDocumentor\Guides\Compiler\CompilerContext;
16+
use phpDocumentor\Guides\Compiler\CompilerContextInterface;
1717
use phpDocumentor\Guides\Compiler\NodeTransformer;
1818
use phpDocumentor\Guides\Nodes\Inline\CitationInlineNode;
1919
use phpDocumentor\Guides\Nodes\Node;
2020

2121
/** @implements NodeTransformer<Node> */
2222
final class CitationInlineNodeTransformer implements NodeTransformer
2323
{
24-
public function enterNode(Node $node, CompilerContext $compilerContext): Node
24+
public function enterNode(Node $node, CompilerContextInterface $compilerContext): Node
2525
{
2626
if ($node instanceof CitationInlineNode) {
2727
$internalTarget = $compilerContext->getProjectNode()->getCitationTarget($node->getName());
@@ -31,7 +31,7 @@ public function enterNode(Node $node, CompilerContext $compilerContext): Node
3131
return $node;
3232
}
3333

34-
public function leaveNode(Node $node, CompilerContext $compilerContext): Node|null
34+
public function leaveNode(Node $node, CompilerContextInterface $compilerContext): Node|null
3535
{
3636
return $node;
3737
}

packages/guides/src/Compiler/NodeTransformers/CitationTargetTransformer.php

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

1414
namespace phpDocumentor\Guides\Compiler\NodeTransformers;
1515

16-
use phpDocumentor\Guides\Compiler\CompilerContext;
16+
use phpDocumentor\Guides\Compiler\CompilerContextInterface;
1717
use phpDocumentor\Guides\Compiler\NodeTransformer;
1818
use phpDocumentor\Guides\Meta\CitationTarget;
1919
use phpDocumentor\Guides\Nodes\CitationNode;
@@ -22,7 +22,7 @@
2222
/** @implements NodeTransformer<Node> */
2323
final class CitationTargetTransformer implements NodeTransformer
2424
{
25-
public function enterNode(Node $node, CompilerContext $compilerContext): Node
25+
public function enterNode(Node $node, CompilerContextInterface $compilerContext): Node
2626
{
2727
if ($node instanceof CitationNode) {
2828
$compilerContext->getProjectNode()->addCitationTarget(
@@ -37,7 +37,7 @@ public function enterNode(Node $node, CompilerContext $compilerContext): Node
3737
return $node;
3838
}
3939

40-
public function leaveNode(Node $node, CompilerContext $compilerContext): Node|null
40+
public function leaveNode(Node $node, CompilerContextInterface $compilerContext): Node|null
4141
{
4242
return $node;
4343
}

packages/guides/src/Compiler/NodeTransformers/ClassNodeTransformer.php

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

1414
namespace phpDocumentor\Guides\Compiler\NodeTransformers;
1515

16-
use phpDocumentor\Guides\Compiler\CompilerContext;
16+
use phpDocumentor\Guides\Compiler\CompilerContextInterface;
1717
use phpDocumentor\Guides\Compiler\NodeTransformer;
1818
use phpDocumentor\Guides\Nodes\ClassNode;
1919
use phpDocumentor\Guides\Nodes\DocumentNode;
@@ -32,7 +32,7 @@ final class ClassNodeTransformer implements NodeTransformer
3232
/** @var string[] */
3333
private array $classes = [];
3434

35-
public function enterNode(Node $node, CompilerContext $compilerContext): Node
35+
public function enterNode(Node $node, CompilerContextInterface $compilerContext): Node
3636
{
3737
if ($node instanceof DocumentNode) {
3838
// unset classes when entering the next document
@@ -52,7 +52,7 @@ public function enterNode(Node $node, CompilerContext $compilerContext): Node
5252
return $node;
5353
}
5454

55-
public function leaveNode(Node $node, CompilerContext $compilerContext): Node|null
55+
public function leaveNode(Node $node, CompilerContextInterface $compilerContext): Node|null
5656
{
5757
if ($node instanceof ClassNode) {
5858
//Remove the class node from the tree.

packages/guides/src/Compiler/NodeTransformers/CollectLinkTargetsTransformer.php

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

1414
namespace phpDocumentor\Guides\Compiler\NodeTransformers;
1515

16-
use phpDocumentor\Guides\Compiler\CompilerContext;
16+
use phpDocumentor\Guides\Compiler\CompilerContextInterface;
1717
use phpDocumentor\Guides\Compiler\NodeTransformer;
1818
use phpDocumentor\Guides\Meta\InternalTarget;
1919
use phpDocumentor\Guides\Nodes\AnchorNode;
@@ -49,7 +49,7 @@ public function __construct(
4949
$this->documentStack = new SplStack();
5050
}
5151

52-
public function enterNode(Node $node, CompilerContext $compilerContext): Node
52+
public function enterNode(Node $node, CompilerContextInterface $compilerContext): Node
5353
{
5454
if ($node instanceof DocumentNode) {
5555
$this->documentStack->push($node);
@@ -137,7 +137,7 @@ public function enterNode(Node $node, CompilerContext $compilerContext): Node
137137
return $node;
138138
}
139139

140-
public function leaveNode(Node $node, CompilerContext $compilerContext): Node|null
140+
public function leaveNode(Node $node, CompilerContextInterface $compilerContext): Node|null
141141
{
142142
if ($node instanceof DocumentNode) {
143143
$this->documentStack->pop();
@@ -157,7 +157,7 @@ public function getPriority(): int
157157
return 5000;
158158
}
159159

160-
private function addLinkTargetToProject(CompilerContext $compilerContext, InternalTarget $internalTarget): void
160+
private function addLinkTargetToProject(CompilerContextInterface $compilerContext, InternalTarget $internalTarget): void
161161
{
162162
if ($compilerContext->getProjectNode()->hasInternalTarget($internalTarget->getAnchor(), $internalTarget->getLinkType())) {
163163
$otherLink = $compilerContext->getProjectNode()->getInternalTarget($internalTarget->getAnchor(), $internalTarget->getLinkType());

packages/guides/src/Compiler/NodeTransformers/DocumentBlockNodeTransformer.php

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

1414
namespace phpDocumentor\Guides\Compiler\NodeTransformers;
1515

16-
use phpDocumentor\Guides\Compiler\CompilerContext;
16+
use phpDocumentor\Guides\Compiler\CompilerContextInterface;
1717
use phpDocumentor\Guides\Compiler\NodeTransformer;
1818
use phpDocumentor\Guides\Nodes\DocumentBlockNode;
1919
use phpDocumentor\Guides\Nodes\Menu\TocNode;
@@ -27,12 +27,12 @@
2727
*/
2828
final class DocumentBlockNodeTransformer implements NodeTransformer
2929
{
30-
public function enterNode(Node $node, CompilerContext $compilerContext): Node
30+
public function enterNode(Node $node, CompilerContextInterface $compilerContext): Node
3131
{
3232
return $node;
3333
}
3434

35-
public function leaveNode(Node $node, CompilerContext $compilerContext): Node|null
35+
public function leaveNode(Node $node, CompilerContextInterface $compilerContext): Node|null
3636
{
3737
if ($node instanceof DocumentBlockNode) {
3838
$children = [];

packages/guides/src/Compiler/NodeTransformers/DocumentEntryRegistrationTransformer.php

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

1414
namespace phpDocumentor\Guides\Compiler\NodeTransformers;
1515

16-
use phpDocumentor\Guides\Compiler\CompilerContext;
16+
use phpDocumentor\Guides\Compiler\CompilerContextInterface;
1717
use phpDocumentor\Guides\Compiler\NodeTransformer;
1818
use phpDocumentor\Guides\Nodes\DocumentNode;
1919
use phpDocumentor\Guides\Nodes\DocumentTree\DocumentEntryNode;
@@ -29,12 +29,12 @@ public function __construct(
2929
) {
3030
}
3131

32-
public function enterNode(Node $node, CompilerContext $compilerContext): Node
32+
public function enterNode(Node $node, CompilerContextInterface $compilerContext): Node
3333
{
3434
return $node;
3535
}
3636

37-
public function leaveNode(Node $node, CompilerContext $compilerContext): Node|null
37+
public function leaveNode(Node $node, CompilerContextInterface $compilerContext): Node|null
3838
{
3939
if (!$node instanceof DocumentNode) {
4040
return $node;

0 commit comments

Comments
 (0)