/**
* @param \PHPStan\Analyser\Scope $scope
* @param \PHPStan\Type\Type $returnType
* @param \PhpParser\Node\Expr|null $returnValue
* @param string $emptyReturnStatementMessage
* @param string $voidMessage
* @param string $typeMismatchMessage
* @return string[]
*/
public function checkReturnType(Scope $scope, Type $returnType, Expr $returnValue = null, string $emptyReturnStatementMessage, string $voidMessage, string $typeMismatchMessage) : array
{
if ($returnValue === null) {
if ($returnType instanceof VoidType || $returnType instanceof MixedType) {
return [];
}
return [sprintf($emptyReturnStatementMessage, $returnType->describe())];
}
$returnValueType = $scope->getType($returnValue);
if ($returnType instanceof VoidType) {
return [sprintf($voidMessage, $returnValueType->describe())];
}
if (!$returnType->accepts($returnValueType)) {
return [sprintf($typeMismatchMessage, $returnType->describe(), $returnValueType->describe())];
}
return [];
}