Open ondrejmirtes opened 3 years ago
The parser only collects comments before a node -- as the attributes are considered part of the class, the doc comment ends up being "inside" the class, and thus lost. It's not really possible to fix this with the current architecture.
Alright, thanks! This is probably the same issue:
class HelloWorld
{
#[Groups]
#[Valid]
/** @var \stdClass[]|null */
public ?array $damages = null;
}
given this php code
if (
/** @authdoc-c (i18n="foobar") */
!check("view", "foobar") &&
/** @authdoc-c (i18n="barfoo") */
(empty($myGroups[$groupId]) || !check($myGroups[$groupId], "barfoo"))
)
the second docblock is not seen as well. I guess it is a similar problem.
It seems to me, using $node->name->getStartLine()
is the most reliable option right now. It's not always correct, because we can have
#[Attr]
final
class
A {}
But it's less likely than
#[Attr]
final class A {}
Given this PHP code:
PHP itself sees both attribute and doc comment: https://3v4l.org/Pe17n
But PHP-Parser doesn't (
bin/php-parse
output on PHP 7.4):Original report: https://github.com/phpstan/phpstan/issues/4633