Bug Report
| Subject |
Details |
| Rector version |
2.1.7 |
I have a strange scenario in TYPO3 Rector where I want to convert the @TYPO3\CMS\Extbase\Annotation\Validate into a php attribute: #[\TYPO3\CMS\Extbase\Annotation\Validate(['validator' => 'NotEmpty'])]. The migration works well if the validate annotation is the only one but once you add @var string to it, it doesn't work anymore. The issue is this one: sabbelasichon/typo3-rector/issues/4625
I've tried my best to find the exact location where the error is but I couldn't find it as there is so much going on in the PhpDocInfoFactory and especially the BetterPhpDocParser that I got lost on the way.
Minimal PHP Code Causing Issue
The following code leads to an invalid result:
<?php
class HelloWorld
{
/**
* @var string
* @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
*/
protected $hash = '';
}
results into (note the missing \ in the beginning):
<?php
class HelloWorld
{
/**
* @var string
*/
#[TYPO3\CMS\Extbase\Annotation\Validate(['validator' => 'NotEmpty'])]
protected $name = '';
}
This code works:
<?php
class HelloWorld
{
/**
* @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
*/
protected $hash = '';
}
and results in:
<?php
class HelloWorld
{
#[\TYPO3\CMS\Extbase\Annotation\Validate(['validator' => 'NotEmpty'])]
protected $name = '';
}
Expected Behaviour
The applied rule https://github.com/sabbelasichon/typo3-rector/blob/main/rules/TYPO312/v0/ExtbaseAnnotationToAttributeRector.php does it's job correctly
The most important line in the rector rule is:
if (str_starts_with($doctrineTagValueNode->identifierTypeNode->name, '@TYPO3\CMS')) {
If that is true, the rest works. In the case of the additional @var string annotation, this is false.
Bug Report
I have a strange scenario in TYPO3 Rector where I want to convert the
@TYPO3\CMS\Extbase\Annotation\Validateinto a php attribute:#[\TYPO3\CMS\Extbase\Annotation\Validate(['validator' => 'NotEmpty'])]. The migration works well if the validate annotation is the only one but once you add@var stringto it, it doesn't work anymore. The issue is this one: sabbelasichon/typo3-rector/issues/4625I've tried my best to find the exact location where the error is but I couldn't find it as there is so much going on in the
PhpDocInfoFactoryand especially theBetterPhpDocParserthat I got lost on the way.Minimal PHP Code Causing Issue
The following code leads to an invalid result:
results into (note the missing
\in the beginning):This code works:
and results in:
Expected Behaviour
The applied rule https://github.com/sabbelasichon/typo3-rector/blob/main/rules/TYPO312/v0/ExtbaseAnnotationToAttributeRector.php does it's job correctly
The most important line in the rector rule is:
If that is true, the rest works. In the case of the additional
@var stringannotation, this is false.