rector/rules/TypeDeclaration/NodeAnalyzer/ReturnTypeAnalyzer/StrictBoolReturnTypeAnalyzer.php
Tomas Votruba 3d9b6b2c99 Updated Rector to commit 620321b3833dd450a7de79a620a07c7131342422
620321b383 Add ReturnTypeFromStrictBoolReturnExprRector support for if/else returns (#5384)
2023-12-23 21:26:40 +00:00

49 lines
1.7 KiB
PHP

<?php
declare (strict_types=1);
namespace Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer;
use PhpParser\Node\Expr;
use PhpParser\Node\Expr\Closure;
use PhpParser\Node\Stmt\ClassMethod;
use PhpParser\Node\Stmt\Function_;
use Rector\TypeDeclaration\TypeAnalyzer\AlwaysStrictBoolExprAnalyzer;
final class StrictBoolReturnTypeAnalyzer
{
/**
* @readonly
* @var \Rector\TypeDeclaration\TypeAnalyzer\AlwaysStrictBoolExprAnalyzer
*/
private $alwaysStrictBoolExprAnalyzer;
/**
* @readonly
* @var \Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer\AlwaysStrictReturnAnalyzer
*/
private $alwaysStrictReturnAnalyzer;
public function __construct(AlwaysStrictBoolExprAnalyzer $alwaysStrictBoolExprAnalyzer, \Rector\TypeDeclaration\NodeAnalyzer\ReturnTypeAnalyzer\AlwaysStrictReturnAnalyzer $alwaysStrictReturnAnalyzer)
{
$this->alwaysStrictBoolExprAnalyzer = $alwaysStrictBoolExprAnalyzer;
$this->alwaysStrictReturnAnalyzer = $alwaysStrictReturnAnalyzer;
}
/**
* @param \PhpParser\Node\Stmt\ClassMethod|\PhpParser\Node\Expr\Closure|\PhpParser\Node\Stmt\Function_ $functionLike
*/
public function hasAlwaysStrictBoolReturn($functionLike) : bool
{
$returns = $this->alwaysStrictReturnAnalyzer->matchAlwaysStrictReturns($functionLike);
if ($returns === []) {
return \false;
}
foreach ($returns as $return) {
// we need exact expr return
if (!$return->expr instanceof Expr) {
return \false;
}
if (!$this->alwaysStrictBoolExprAnalyzer->isStrictBoolExpr($return->expr)) {
return \false;
}
}
return \true;
}
}