szepeviktor/phpstan-wordpress

Coverage calculation problem

szepeviktor opened this issue · 6 comments

Contributions are welcome!

Code Coverage Report:
  2022-06-01 21:26:20

 Summary:
  Classes: 13.64% (3/22)
  Methods: 53.23% (33/62)
  Lines:   32.20% (133/413)

SzepeViktor\PHPStan\WordPress\ApplyFiltersDynamicFunctionReturnTypeExtension
  Methods:  66.67% ( 2/ 3)   Lines:  91.67% ( 11/ 12)
SzepeViktor\PHPStan\WordPress\CurrentTimeDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:   7.69% (  1/ 13)
SzepeViktor\PHPStan\WordPress\EchoParameterDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:   5.88% (  1/ 17)
SzepeViktor\PHPStan\WordPress\GetCommentDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:   6.25% (  1/ 16)
SzepeViktor\PHPStan\WordPress\GetListTableDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:   8.33% (  1/ 12)
SzepeViktor\PHPStan\WordPress\GetObjectTaxonomiesDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:   7.14% (  1/ 14)
SzepeViktor\PHPStan\WordPress\GetPostDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:   6.25% (  1/ 16)
SzepeViktor\PHPStan\WordPress\GetPostsDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:   4.35% (  1/ 23)
SzepeViktor\PHPStan\WordPress\GetTaxonomiesDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:   6.67% (  1/ 15)
SzepeViktor\PHPStan\WordPress\GetTermsDynamicFunctionReturnTypeExtension
  Methods:  10.00% ( 1/10)   Lines:   1.59% (  1/ 63)
SzepeViktor\PHPStan\WordPress\HasFilterDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:   7.14% (  1/ 14)
SzepeViktor\PHPStan\WordPress\HookDocBlock
  Methods: 100.00% ( 3/ 3)   Lines: 100.00% ( 13/ 13)
SzepeViktor\PHPStan\WordPress\HookDocsParamException
  Methods:  ( 0/ 0)   Lines:  (  0/  0)
SzepeViktor\PHPStan\WordPress\HookDocsRule
  Methods: 100.00% ( 7/ 7)   Lines: 100.00% ( 57/ 57)
SzepeViktor\PHPStan\WordPress\HookDocsVisitor
  Methods: 100.00% ( 2/ 2)   Lines: 100.00% ( 11/ 11)
SzepeViktor\PHPStan\WordPress\IsWpErrorFunctionTypeSpecifyingExtension
  Methods:  33.33% ( 1/ 3)   Lines:  37.50% (  3/  8)
SzepeViktor\PHPStan\WordPress\IsWpErrorRule
  Methods:  66.67% ( 2/ 3)   Lines:  86.96% ( 20/ 23)
SzepeViktor\PHPStan\WordPress\MySQL2DateDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:   8.33% (  1/ 12)
SzepeViktor\PHPStan\WordPress\RedirectCanonicalDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:  50.00% (  1/  2)
SzepeViktor\PHPStan\WordPress\ShortcodeAttsDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:   6.67% (  1/ 15)
SzepeViktor\PHPStan\WordPress\StringOrArrayDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:   6.67% (  1/ 15)
SzepeViktor\PHPStan\WordPress\TermExistsDynamicFunctionReturnTypeExtension
  Methods:  50.00% ( 1/ 2)   Lines:  11.54% (  3/ 26)
SzepeViktor\PHPStan\WordPress\WPErrorParameterDynamicFunctionReturnTypeExtension
  Methods:  33.33% ( 1/ 3)   Lines:   6.25% (  1/ 16)

jfyi I took a look and wanted to add that the coverage metric is a bit misleading here. E.g. DynamicReturnTypeExtensionTest has the dataprovider dataFileAsserts that gathers assert types of many files which uses and actually covers many of the DynamicFunctionReturnTypeExtension classes implemented here, e.g. ShortcodeAttsDynamicFunctionReturnTypeExtension.
And in the actual test method testFileAsserts it asserts those types. But apparently this way no coverage is collected for those extension classes, even if they were executed. I'm not a 100% sure, but I assume this is because they are not executed via test method.

Long story short, many of the extension should already have quite good coverage, but the data we see does not reflect that. And right now I'm not sure how to fix this :/ CC @johnbillion

I assume this is because they are not executed via test method

How could we become phpunit coverage friendly?
Maybe @ondrejmirtes could help.

fyi this was also briefly discussed in phpstan/phpstan#8238 and apparently it is a known problem, the code coverage via dataproviders is currently just wrong. I don't have any fix for this and I think Ondrej doesn't have either atm since he's not pursuing code coverage

But I was thinking into looking this on phstan side a bit more. I'll let you know if I find out more

I'm not willing to work on this package as WordPress core makes it impossible to work normally.

This was a simple package back then.
Now it needs a LOT of PHP code to handle weird WordPress core functions.