diff --git a/rules-tests/Symfony73/Rector/Class_/ConstraintOptionsToNamedArgumentsRector/Fixture/skip_with_translate_comment.php.inc b/rules-tests/Symfony73/Rector/Class_/ConstraintOptionsToNamedArgumentsRector/Fixture/skip_with_translate_comment.php.inc new file mode 100644 index 000000000..c313a1651 --- /dev/null +++ b/rules-tests/Symfony73/Rector/Class_/ConstraintOptionsToNamedArgumentsRector/Fixture/skip_with_translate_comment.php.inc @@ -0,0 +1,24 @@ +add('name', TextType::class, [ + 'constraints' => [ + new NotBlank(['message' => + // @Translate + 'Name is required.' + ]), + ], + ]); + } +} diff --git a/rules-tests/Symfony73/Rector/Class_/ConstraintOptionsToNamedArgumentsRector/Fixture/skip_with_translate_docblock.php.inc b/rules-tests/Symfony73/Rector/Class_/ConstraintOptionsToNamedArgumentsRector/Fixture/skip_with_translate_docblock.php.inc new file mode 100644 index 000000000..e3d23847c --- /dev/null +++ b/rules-tests/Symfony73/Rector/Class_/ConstraintOptionsToNamedArgumentsRector/Fixture/skip_with_translate_docblock.php.inc @@ -0,0 +1,21 @@ +add('name', TextType::class, [ + 'constraints' => [ + new NotBlank(['message' => /** @Translate */ 'Name is required.']), + ], + ]); + } +} diff --git a/rules/Symfony73/Rector/Class_/ConstraintOptionsToNamedArgumentsRector.php b/rules/Symfony73/Rector/Class_/ConstraintOptionsToNamedArgumentsRector.php index 48ef92f75..8e58dc5b7 100644 --- a/rules/Symfony73/Rector/Class_/ConstraintOptionsToNamedArgumentsRector.php +++ b/rules/Symfony73/Rector/Class_/ConstraintOptionsToNamedArgumentsRector.php @@ -110,6 +110,7 @@ public function refactor(Node $node): ?Node $array = $node->args[0]->value; $namedArgs = []; + $oldTokens = $this->file->getOldTokens(); foreach ($array->items as $item) { if (! $item instanceof ArrayItem) { @@ -130,6 +131,22 @@ public function refactor(Node $node): ?Node continue; } + $lastTokenKey = $item->key->getEndTokenPos(); + $startTokenValue = $item->value->getStartTokenPos(); + + while ($lastTokenKey < $startTokenValue) { + ++$lastTokenKey; + + if (! isset($oldTokens[$lastTokenKey])) { + break; + } + + $token = $oldTokens[$lastTokenKey]; + if ($token->is([T_DOC_COMMENT, T_COMMENT])) { + return null; + } + } + $arg = new Arg($item->value); $arg->name = new Identifier($keyValue);