Skip to content

Commit d51af94

Browse files
committed
Revert "Remove no longer needed tweak AlwaysRememberedExpr on Printer per PHPStan 2.1.34 (#7770)"
This reverts commit 38d1caf.
1 parent 7e2b9ef commit d51af94

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

src/PhpParser/Printer/BetterStandardPrinter.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use PhpParser\Node\Expr\BinaryOp\Pipe;
1919
use PhpParser\Node\Expr\CallLike;
2020
use PhpParser\Node\Expr\Instanceof_;
21+
use PhpParser\Node\Expr\Match_;
2122
use PhpParser\Node\Expr\MethodCall;
2223
use PhpParser\Node\Expr\Ternary;
2324
use PhpParser\Node\Expr\Yield_;
@@ -29,6 +30,7 @@
2930
use PhpParser\Node\Stmt\Nop;
3031
use PhpParser\PrettyPrinter\Standard;
3132
use PhpParser\Token;
33+
use PHPStan\Node\Expr\AlwaysRememberedExpr;
3234
use Rector\Configuration\Option;
3335
use Rector\Configuration\Parameter\SimpleParameterProvider;
3436
use Rector\NodeAnalyzer\ExprAnalyzer;
@@ -125,6 +127,23 @@ protected function p(
125127
int $lhsPrecedence = self::MAX_PRECEDENCE,
126128
bool $parentFormatPreserved = false
127129
): string {
130+
// handle already AlwaysRememberedExpr
131+
// @see https://github.com/rectorphp/rector/issues/8815#issuecomment-2503453191
132+
if ($node instanceof AlwaysRememberedExpr) {
133+
return $this->p($node->getExpr(), $precedence, $lhsPrecedence, $parentFormatPreserved);
134+
}
135+
136+
// handle overlapped origNode is Match_ and its subnodes still have AlwaysRememberedExpr
137+
$originalNode = $node->getAttribute(AttributeKey::ORIGINAL_NODE);
138+
if ($originalNode instanceof Match_) {
139+
$subNodeNames = $node->getSubNodeNames();
140+
foreach ($subNodeNames as $subNodeName) {
141+
while ($originalNode->{$subNodeName} instanceof AlwaysRememberedExpr) {
142+
$originalNode->{$subNodeName} = $originalNode->{$subNodeName}->getExpr();
143+
}
144+
}
145+
}
146+
128147
$this->wrapBinaryOpWithBrackets($node);
129148

130149
$content = parent::p($node, $precedence, $lhsPrecedence, $parentFormatPreserved);

0 commit comments

Comments
 (0)