Skip to content

Commit 22cabd0

Browse files
ArshidArshid
authored andcommitted
MbStrContainsRector
1 parent 063a220 commit 22cabd0

1 file changed

Lines changed: 58 additions & 0 deletions

File tree

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Php80\NodeResolver;
6+
7+
use PhpParser\Node\Expr\BinaryOp\Equal;
8+
use PhpParser\Node\Expr\BinaryOp\Identical;
9+
use PhpParser\Node\Expr\BinaryOp\NotEqual;
10+
use PhpParser\Node\Expr\BinaryOp\NotIdentical;
11+
use PhpParser\Node\Expr\FuncCall;
12+
use Rector\NodeNameResolver\NodeNameResolver;
13+
use Rector\PhpParser\Node\Value\ValueResolver;
14+
15+
final readonly class StrFalseComparisonResolver
16+
{
17+
public function __construct(
18+
private ValueResolver $valueResolver,
19+
private NodeNameResolver $nodeNameResolver
20+
) {
21+
}
22+
23+
/**
24+
* @param string[] $oldStrFuncNames
25+
*/
26+
public function resolve(Identical | NotIdentical | Equal | NotEqual $expr, array $oldStrFuncNames): ?FuncCall
27+
{
28+
if ($this->valueResolver->isFalse($expr->left)) {
29+
if (! $expr->right instanceof FuncCall) {
30+
return null;
31+
}
32+
33+
if (! $this->nodeNameResolver->isNames($expr->right, $oldStrFuncNames)) {
34+
return null;
35+
}
36+
37+
/** @var FuncCall $funcCall */
38+
$funcCall = $expr->right;
39+
return $funcCall;
40+
}
41+
42+
if ($this->valueResolver->isFalse($expr->right)) {
43+
if (! $expr->left instanceof FuncCall) {
44+
return null;
45+
}
46+
47+
if (! $this->nodeNameResolver->isNames($expr->left, $oldStrFuncNames)) {
48+
return null;
49+
}
50+
51+
/** @var FuncCall $funcCall */
52+
$funcCall = $expr->left;
53+
return $funcCall;
54+
}
55+
56+
return null;
57+
}
58+
}

0 commit comments

Comments
 (0)