Skip to content

Commit aa281cb

Browse files
authored
[Symfony73] Handle with set allowExtraFields named argument on ConstraintOptionsToNamedArgumentsRector (#924)
* [Symfony73] Handle with set allowExtraFields named argument on ConstraintOptionsToNamedArgumentsRector * add fixture
1 parent 6f80310 commit aa281cb

File tree

2 files changed

+60
-4
lines changed

2 files changed

+60
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
namespace Rector\Symfony\Tests\Symfony73\Rector\Class_\ConstraintOptionsToNamedArgumentsRector\Fixture;
4+
5+
use Symfony\Component\Validator\Constraints as Assert;
6+
7+
final class WithAllowExtraFieldsFalse
8+
{
9+
public function run(bool $param)
10+
{
11+
$constraints = new Assert\Collection([
12+
'example1' => [new Assert\NotBlank(), new Assert\Type('string')],
13+
'example2' => [new Assert\Type('string')],
14+
'example3' => [new Assert\NotBlank(), new Assert\Type('string')],
15+
'example4' => [new Assert\NotBlank(), new Assert\Type('string')],
16+
], allowExtraFields: false);
17+
}
18+
}
19+
20+
?>
21+
-----
22+
<?php
23+
24+
namespace Rector\Symfony\Tests\Symfony73\Rector\Class_\ConstraintOptionsToNamedArgumentsRector\Fixture;
25+
26+
use Symfony\Component\Validator\Constraints as Assert;
27+
28+
final class WithAllowExtraFieldsFalse
29+
{
30+
public function run(bool $param)
31+
{
32+
$constraints = new Assert\Collection(fields: [
33+
'example1' => [new Assert\NotBlank(), new Assert\Type('string')],
34+
'example2' => [new Assert\Type('string')],
35+
'example3' => [new Assert\NotBlank(), new Assert\Type('string')],
36+
'example4' => [new Assert\NotBlank(), new Assert\Type('string')],
37+
]);
38+
}
39+
}
40+
41+
?>

rules/Symfony73/Rector/Class_/ConstraintOptionsToNamedArgumentsRector.php

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,15 +96,30 @@ public function refactor(Node $node): ?Node
9696
}
9797

9898
$args = $node->getArgs();
99-
if ($className === SymfonyClass::SYMFONY_VALIDATOR_CONSTRAINTS_COLLECTION
100-
&& count($args) === 1
101-
&& $args[0]->value instanceof Array_) {
102-
99+
if ($className === SymfonyClass::SYMFONY_VALIDATOR_CONSTRAINTS_COLLECTION && $args[0]->value instanceof Array_) {
103100
if ($args[0]->name instanceof Identifier) {
104101
return null;
105102
}
106103

107104
$args[0]->name = new Identifier('fields');
105+
106+
foreach ($args as $key => $arg) {
107+
if (! $arg->name instanceof Identifier) {
108+
continue;
109+
}
110+
111+
if ($arg->name->toString() !== 'allowExtraFields') {
112+
continue;
113+
}
114+
115+
if (! $this->valueResolver->isFalse($arg->value)) {
116+
continue;
117+
}
118+
119+
unset($args[$key]);
120+
}
121+
122+
$node->args = array_values($args);
108123
return $node;
109124
}
110125

0 commit comments

Comments
 (0)