Skip to content

Commit 8f4c135

Browse files
committed
Pass original node to fixNode()
1 parent 9d1c245 commit 8f4c135

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+465
-9
lines changed

build/PHPStan/Build/NamedArgumentsRule.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,9 @@ public function processNode(Node $node, Scope $scope): array
9292
}
9393

9494
/**
95-
* @param Node\Expr\FuncCall|Node\Expr\New_|Node\Expr\StaticCall $node
9695
* @return list<IdentifierRuleError>
9796
*/
98-
private function processArgs(ExtendedParametersAcceptor $acceptor, Scope $scope, Node\Expr\CallLike $node): array
97+
private function processArgs(ExtendedParametersAcceptor $acceptor, Scope $scope, Node\Expr\FuncCall|Node\Expr\New_|Node\Expr\StaticCall $node): array
9998
{
10099
if ($acceptor->isVariadic()) {
101100
return [];
@@ -169,8 +168,7 @@ private function processArgs(ExtendedParametersAcceptor $acceptor, Scope $scope,
169168
}
170169

171170
if (count($errorBuilders) > 0) {
172-
$errorBuilders[0]->fixNode(static function (Node $node) use ($acceptor, $hasNamedArgument, $parameters, $scope) {
173-
/** @var Node\Expr\FuncCall|Node\Expr\New_|Node\Expr\StaticCall $node */
171+
$errorBuilders[0]->fixNode($node, static function ($node) use ($acceptor, $hasNamedArgument, $parameters, $scope) {
174172
$normalizedArgs = ArgumentsNormalizer::reorderArgs($acceptor, $node->getArgs());
175173
if ($normalizedArgs === null) {
176174
return $node;

build/ignore-gte-php7.4-errors.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ includes:
33

44
parameters:
55
ignoreErrors:
6-
- '#^Class PHPStan\\Rules\\RuleErrors\\RuleError(?:\d+) has an uninitialized property (?:\$message|\$line|\$identifier|\$tip|\$file|\$metadata)#'
6+
- '#^Class PHPStan\\Rules\\RuleErrors\\RuleError(?:\d+) has an uninitialized property (?:\$message|\$line|\$identifier|\$tip|\$file|\$metadata|\$originalNode)#'
77
- '#Extension has an uninitialized property (?:\$typeSpecifier|\$broker)#'
88
-
99
message: '#has an uninitialized property#'

src/Analyser/RuleErrorTransformer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public function transform(
9898

9999
$fixedErrorDiff = null;
100100
if ($ruleError instanceof FixableNodeRuleError) {
101-
if ($node instanceof VirtualNode) {
101+
if ($ruleError->getOriginalNode() instanceof VirtualNode) {
102102
throw new ShouldNotHappenException('Cannot fix virtual node');
103103
}
104104
$fixingFile = $filePath;
@@ -124,7 +124,7 @@ public function transform(
124124
$newStmts = $cloningTraverser->traverse($fileNodes);
125125

126126
$traverser = new NodeTraverser();
127-
$visitor = new ReplacingNodeVisitor($node, $ruleError->getNewNodeCallable());
127+
$visitor = new ReplacingNodeVisitor($ruleError->getOriginalNode(), $ruleError->getNewNodeCallable());
128128
$traverser->addVisitor($visitor);
129129

130130
/** @var Stmt[] $newStmts */

src/Rules/FixableNodeRuleError.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
interface FixableNodeRuleError extends RuleError
88
{
99

10+
public function getOriginalNode(): Node;
11+
1012
/** @return callable(Node): Node */
1113
public function getNewNodeCallable(): callable;
1214

src/Rules/RuleErrorBuilder.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,11 @@ public static function getRuleErrorTypes(): array
120120
self::TYPE_FIXABLE_NODE => [
121121
FixableNodeRuleError::class,
122122
[
123+
[
124+
'originalNode',
125+
'\PhpParser\Node',
126+
'\PhpParser\Node',
127+
],
123128
[
124129
'newNodeCallable',
125130
null,
@@ -268,12 +273,15 @@ public function nonIgnorable(): self
268273

269274
/**
270275
* @internal Experimental
271-
* @param callable(Node): Node $cb
276+
* @template TNode of Node
277+
* @param TNode $node
278+
* @param callable(TNode): Node $cb
272279
* @phpstan-this-out self<T&FixableNodeRuleError>
273280
* @return self<T&FixableNodeRuleError>
274281
*/
275-
public function fixNode(callable $cb): self
282+
public function fixNode(Node $node, callable $cb): self
276283
{
284+
$this->properties['originalNode'] = $node;
277285
$this->properties['newNodeCallable'] = $cb;
278286
$this->type |= self::TYPE_FIXABLE_NODE;
279287

src/Rules/RuleErrors/RuleError129.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ final class RuleError129 implements RuleError, FixableNodeRuleError
1414

1515
public string $message;
1616

17+
public Node $originalNode;
18+
1719
/** @var callable(Node): Node */
1820
public $newNodeCallable;
1921

@@ -22,6 +24,11 @@ public function getMessage(): string
2224
return $this->message;
2325
}
2426

27+
public function getOriginalNode(): Node
28+
{
29+
return $this->originalNode;
30+
}
31+
2532
/**
2633
* @return callable(Node): Node
2734
*/

src/Rules/RuleErrors/RuleError131.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ final class RuleError131 implements RuleError, LineRuleError, FixableNodeRuleErr
1717

1818
public int $line;
1919

20+
public Node $originalNode;
21+
2022
/** @var callable(Node): Node */
2123
public $newNodeCallable;
2224

@@ -30,6 +32,11 @@ public function getLine(): int
3032
return $this->line;
3133
}
3234

35+
public function getOriginalNode(): Node
36+
{
37+
return $this->originalNode;
38+
}
39+
3340
/**
3441
* @return callable(Node): Node
3542
*/

src/Rules/RuleErrors/RuleError133.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ final class RuleError133 implements RuleError, FileRuleError, FixableNodeRuleErr
1919

2020
public string $fileDescription;
2121

22+
public Node $originalNode;
23+
2224
/** @var callable(Node): Node */
2325
public $newNodeCallable;
2426

@@ -37,6 +39,11 @@ public function getFileDescription(): string
3739
return $this->fileDescription;
3840
}
3941

42+
public function getOriginalNode(): Node
43+
{
44+
return $this->originalNode;
45+
}
46+
4047
/**
4148
* @return callable(Node): Node
4249
*/

src/Rules/RuleErrors/RuleError135.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ final class RuleError135 implements RuleError, LineRuleError, FileRuleError, Fix
2222

2323
public string $fileDescription;
2424

25+
public Node $originalNode;
26+
2527
/** @var callable(Node): Node */
2628
public $newNodeCallable;
2729

@@ -45,6 +47,11 @@ public function getFileDescription(): string
4547
return $this->fileDescription;
4648
}
4749

50+
public function getOriginalNode(): Node
51+
{
52+
return $this->originalNode;
53+
}
54+
4855
/**
4956
* @return callable(Node): Node
5057
*/

src/Rules/RuleErrors/RuleError137.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ final class RuleError137 implements RuleError, TipRuleError, FixableNodeRuleErro
1717

1818
public string $tip;
1919

20+
public Node $originalNode;
21+
2022
/** @var callable(Node): Node */
2123
public $newNodeCallable;
2224

@@ -30,6 +32,11 @@ public function getTip(): string
3032
return $this->tip;
3133
}
3234

35+
public function getOriginalNode(): Node
36+
{
37+
return $this->originalNode;
38+
}
39+
3340
/**
3441
* @return callable(Node): Node
3542
*/

0 commit comments

Comments
 (0)