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
*/

src/Rules/RuleErrors/RuleError139.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ final class RuleError139 implements RuleError, LineRuleError, TipRuleError, Fixa
2020

2121
public string $tip;
2222

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

@@ -38,6 +40,11 @@ public function getTip(): string
3840
return $this->tip;
3941
}
4042

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

src/Rules/RuleErrors/RuleError141.php

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

2323
public string $tip;
2424

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

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

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

src/Rules/RuleErrors/RuleError143.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ final class RuleError143 implements RuleError, LineRuleError, FileRuleError, Tip
2525

2626
public string $tip;
2727

28+
public Node $originalNode;
29+
2830
/** @var callable(Node): Node */
2931
public $newNodeCallable;
3032

@@ -53,6 +55,11 @@ public function getTip(): string
5355
return $this->tip;
5456
}
5557

58+
public function getOriginalNode(): Node
59+
{
60+
return $this->originalNode;
61+
}
62+
5663
/**
5764
* @return callable(Node): Node
5865
*/

src/Rules/RuleErrors/RuleError145.php

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

1818
public string $identifier;
1919

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

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

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

src/Rules/RuleErrors/RuleError147.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ final class RuleError147 implements RuleError, LineRuleError, IdentifierRuleErro
2020

2121
public string $identifier;
2222

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

@@ -38,6 +40,11 @@ public function getIdentifier(): string
3840
return $this->identifier;
3941
}
4042

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

src/Rules/RuleErrors/RuleError149.php

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

2323
public string $identifier;
2424

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

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

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

src/Rules/RuleErrors/RuleError151.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ final class RuleError151 implements RuleError, LineRuleError, FileRuleError, Ide
2525

2626
public string $identifier;
2727

28+
public Node $originalNode;
29+
2830
/** @var callable(Node): Node */
2931
public $newNodeCallable;
3032

@@ -53,6 +55,11 @@ public function getIdentifier(): string
5355
return $this->identifier;
5456
}
5557

58+
public function getOriginalNode(): Node
59+
{
60+
return $this->originalNode;
61+
}
62+
5663
/**
5764
* @return callable(Node): Node
5865
*/

src/Rules/RuleErrors/RuleError153.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ final class RuleError153 implements RuleError, TipRuleError, IdentifierRuleError
2020

2121
public string $identifier;
2222

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

@@ -38,6 +40,11 @@ public function getIdentifier(): string
3840
return $this->identifier;
3941
}
4042

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

src/Rules/RuleErrors/RuleError155.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ final class RuleError155 implements RuleError, LineRuleError, TipRuleError, Iden
2323

2424
public string $identifier;
2525

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

@@ -46,6 +48,11 @@ public function getIdentifier(): string
4648
return $this->identifier;
4749
}
4850

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

0 commit comments

Comments
 (0)