`Squiz.Commenting.FunctionComment.MissingParamName` false positive
Describe the bug
Squiz.Commenting.FunctionComment.MissingParamName is triggered for valid @param docblock
Code sample
<?php
declare(strict_types=1);
class X
{
/**
* @param array{
* ud: string
* } $data
*/
public function sfsd(array $data): void
{
}
}
To reproduce
Steps to reproduce the behavior:
- Create a file called
test.phpwith the code sample above... - Run
phpcs test.php ... - See error message displayed
phpcs: Squiz.Commenting.FunctionComment.MissingParamName: Missing parameter name
Expected behavior
No error
Versions (please complete the following information)
| Operating System | [e.g., Windows 10, MacOS 10.15] |
| PHP version | 8.3 |
| PHP_CodeSniffer version | 3.10.1 |
| Standard | Squiz |
| Install type | composer local |
Please confirm
- [x] I have searched the issue list and am not opening a duplicate issue.
- [ ] I have read the Contribution Guidelines and this is not a support question.
- [x] I confirm that this bug is a bug in PHP_CodeSniffer and not in one of the external standards.
- [ ] I have verified the issue still exists in the
masterbranch of PHP_CodeSniffer.
The Squiz.Commenting.FunctionComment sniff - and other comment related sniffs in PHPCS - do not support the array{...} type format and never have.
Reclassifying this ticket as a feature request, not a bug.
To be honest, I've never seen that format before, so is this a codebase specific format ? Is this a format promoted by some other tool ? Is there any formal specification of that array type format ?
As things are at this time, this issue is not actionable without further information.
Note: I'm not giving an opinion yet whether this is a feature request which would be accepted to be supported...
I forgot to mention it does work for single line array shape declaration.
It's array shape, widely adopted by php ecosystem https://phpstan.org/writing-php-code/phpdoc-types#array-shapes
A workaround is to use @phpstan-param instead of @param. PHPStan understands it and PHPCS ignores it as it's not @param.