Skip to content

Commit f468123

Browse files
parth391GeniJaho
andauthored
fix: property/variable static calls, EloquentMagicMethodToQueryBuilderRector (#406)
Co-authored-by: Geni Jaho <[email protected]>
1 parent 1381c88 commit f468123

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed

src/Rector/StaticCall/EloquentMagicMethodToQueryBuilderRector.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use PhpParser\Node;
1111
use PhpParser\Node\Expr\StaticCall;
1212
use PhpParser\Node\Identifier;
13+
use PhpParser\Node\Name;
1314
use Rector\Contract\Rector\ConfigurableRectorInterface;
1415
use RectorLaravel\AbstractRector;
1516
use ReflectionException;
@@ -107,7 +108,13 @@ public function refactor(Node $node): ?Node
107108
return null;
108109
}
109110

110-
$staticCall = $this->nodeFactory->createStaticCall($originalClassName, 'query');
111+
if ($node->class instanceof Name) {
112+
$staticCall = $this->nodeFactory->createStaticCall($originalClassName, 'query');
113+
}
114+
115+
if (! $node->class instanceof Name) {
116+
$staticCall = new StaticCall($node->class, 'query');
117+
}
111118

112119
$methodCall = $this->nodeFactory->createMethodCall($staticCall, $methodName);
113120
foreach ($node->args as $arg) {

tests/Rector/StaticCall/EloquentMagicMethodToQueryBuilderRector/Fixture/fixture.php.inc

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,20 @@ use RectorLaravel\Tests\Rector\StaticCall\EloquentMagicMethodToQueryBuilderRecto
66

77
class SomeController
88
{
9+
public function __construct(
10+
protected readonly User $userbaseModel,
11+
) {
12+
}
13+
914
public function getUser()
1015
{
16+
$userModel = new User;
17+
1118
# eligible
1219
$user = User::publicMethodBelongsToEloquentQueryBuilder(1)->where('xxx', 'xxx')->first();
1320
$user = User::publicMethodBelongsToQueryBuilder(1);
21+
$user = $this->userbaseModel::publicMethodBelongsToEloquentQueryBuilder(1)->where('xxx', 'xxx')->first();
22+
$user = $userModel::publicMethodBelongsToEloquentQueryBuilder(1)->where('xxx', 'xxx')->first();
1423

1524
# not eligible
1625
$user = User::privateMethodBelongsToQueryBuilder(1);
@@ -19,6 +28,8 @@ class SomeController
1928
$user = User::query()->publicMethodBelongsToEloquentQueryBuilder(1);
2029
$user = User::query()->publicMethodBelongsToQueryBuilder(1);
2130
$user = User::staticMethodBelongsToModel(1);
31+
$user = $this->userbaseModel::query()->publicMethodBelongsToEloquentQueryBuilder(1)->where('xxx', 'xxx')->first();
32+
$user = $userModel::query()->publicMethodBelongsToEloquentQueryBuilder(1)->where('xxx', 'xxx')->first();
2233
}
2334
}
2435
-----
@@ -30,11 +41,20 @@ use RectorLaravel\Tests\Rector\StaticCall\EloquentMagicMethodToQueryBuilderRecto
3041

3142
class SomeController
3243
{
44+
public function __construct(
45+
protected readonly User $userbaseModel,
46+
) {
47+
}
48+
3349
public function getUser()
3450
{
51+
$userModel = new User;
52+
3553
# eligible
3654
$user = User::query()->publicMethodBelongsToEloquentQueryBuilder(1)->where('xxx', 'xxx')->first();
3755
$user = User::query()->publicMethodBelongsToQueryBuilder(1);
56+
$user = $this->userbaseModel::query()->publicMethodBelongsToEloquentQueryBuilder(1)->where('xxx', 'xxx')->first();
57+
$user = $userModel::query()->publicMethodBelongsToEloquentQueryBuilder(1)->where('xxx', 'xxx')->first();
3858

3959
# not eligible
4060
$user = User::privateMethodBelongsToQueryBuilder(1);
@@ -43,5 +63,7 @@ class SomeController
4363
$user = User::query()->publicMethodBelongsToEloquentQueryBuilder(1);
4464
$user = User::query()->publicMethodBelongsToQueryBuilder(1);
4565
$user = User::staticMethodBelongsToModel(1);
66+
$user = $this->userbaseModel::query()->publicMethodBelongsToEloquentQueryBuilder(1)->where('xxx', 'xxx')->first();
67+
$user = $userModel::query()->publicMethodBelongsToEloquentQueryBuilder(1)->where('xxx', 'xxx')->first();
4668
}
4769
}

tests/Rector/StaticCall/EloquentMagicMethodToQueryBuilderRector/Fixture/with_exclude_methods.php.inc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,19 @@ use RectorLaravel\Tests\Rector\StaticCall\EloquentMagicMethodToQueryBuilderRecto
66

77
class SomeController
88
{
9+
public function __construct(
10+
protected readonly User $userBaseModel,
11+
) {
12+
}
13+
914
public function getUser()
1015
{
16+
$userModel = new User;
17+
1118
# eligible
1219
$user = User::publicMethodBelongsToQueryBuilder();
20+
$user = $this->userBaseModel::publicMethodBelongsToQueryBuilder();
21+
$user = $userModel::publicMethodBelongsToQueryBuilder();
1322

1423
# not eligible
1524
$user = User::excludablePublicMethodBelongsToEloquentQueryBuilder();
@@ -24,10 +33,19 @@ use RectorLaravel\Tests\Rector\StaticCall\EloquentMagicMethodToQueryBuilderRecto
2433

2534
class SomeController
2635
{
36+
public function __construct(
37+
protected readonly User $userBaseModel,
38+
) {
39+
}
40+
2741
public function getUser()
2842
{
43+
$userModel = new User;
44+
2945
# eligible
3046
$user = User::query()->publicMethodBelongsToQueryBuilder();
47+
$user = $this->userBaseModel::query()->publicMethodBelongsToQueryBuilder();
48+
$user = $userModel::query()->publicMethodBelongsToQueryBuilder();
3149

3250
# not eligible
3351
$user = User::excludablePublicMethodBelongsToEloquentQueryBuilder();

0 commit comments

Comments
 (0)