diff --git a/tasks/phpstan/extensions/CodeceptionExtension/Type/StubDynamicReturnTypeExtension.php b/tasks/phpstan/extensions/CodeceptionExtension/Type/StubDynamicReturnTypeExtension.php new file mode 100644 index 0000000000..7103748b70 --- /dev/null +++ b/tasks/phpstan/extensions/CodeceptionExtension/Type/StubDynamicReturnTypeExtension.php @@ -0,0 +1,39 @@ +getName(), [ + 'make', + 'makeEmpty', + 'makeEmptyExcept', + 'construct', + 'constructEmpty', + 'constructEmptyExcept', + 'copy', + ], true); + } + + public function getTypeFromStaticMethodCall(MethodReflection $reflection, StaticCall $call, Scope $scope): Type { + $type = $scope->getType($call->args[0]->value); + if ($type instanceof ConstantStringType) { + return new ObjectType($type->getValue()); // $type is class name + } + return $type; + } +} diff --git a/tasks/phpstan/extensions/CodeceptionExtension/Type/TestCaseDynamicReturnTypeExtension.php b/tasks/phpstan/extensions/CodeceptionExtension/Type/TestCaseDynamicReturnTypeExtension.php new file mode 100644 index 0000000000..75c5b104e0 --- /dev/null +++ b/tasks/phpstan/extensions/CodeceptionExtension/Type/TestCaseDynamicReturnTypeExtension.php @@ -0,0 +1,38 @@ +getName(), [ + 'make', + 'makeEmpty', + 'makeEmptyExcept', + 'construct', + 'constructEmpty', + 'constructEmptyExcept', + 'copy', + ], true); + } + + public function getTypeFromMethodCall(MethodReflection $reflection, MethodCall $call, Scope $scope): Type { + $type = $scope->getType($call->args[0]->value); + if ($type instanceof ConstantStringType) { + return new ObjectType($type->getValue()); // $type is class name + } + return $type; + } +} diff --git a/tasks/phpstan/extensions/CodeceptionExtension/extension.neon b/tasks/phpstan/extensions/CodeceptionExtension/extension.neon new file mode 100644 index 0000000000..d3bc4e9070 --- /dev/null +++ b/tasks/phpstan/extensions/CodeceptionExtension/extension.neon @@ -0,0 +1,9 @@ +services: + - + class: MailPoet\PHPStan\Extensions\CodeceptionExtension\Type\StubDynamicReturnTypeExtension + tags: + - phpstan.broker.dynamicStaticMethodReturnTypeExtension + - + class: MailPoet\PHPStan\Extensions\CodeceptionExtension\Type\TestCaseDynamicReturnTypeExtension + tags: + - phpstan.broker.dynamicMethodReturnTypeExtension diff --git a/tasks/phpstan/phpstan-tests.neon b/tasks/phpstan/phpstan-tests.neon index 98b08306e2..d6ec6c45a2 100644 --- a/tasks/phpstan/phpstan-tests.neon +++ b/tasks/phpstan/phpstan-tests.neon @@ -15,3 +15,4 @@ parameters: includes: - vendor/phpstan/phpstan-phpunit/extension.neon - extensions/PHPUnit5CompatExtension/extension.neon + - extensions/CodeceptionExtension/extension.neon