|
5 | 5 | namespace RectorLaravel\Rector\MethodCall;
|
6 | 6 |
|
7 | 7 | use PhpParser\Node;
|
8 |
| -use PhpParser\Node\Arg; |
9 |
| -use PhpParser\Node\Expr; |
10 | 8 | use PhpParser\Node\Expr\MethodCall;
|
11 |
| -use PhpParser\Node\Identifier; |
12 |
| -use PhpParser\Node\Scalar\String_; |
13 |
| -use PhpParser\Node\VariadicPlaceholder; |
14 | 9 | use PHPStan\Type\ObjectType;
|
15 | 10 | use Rector\Core\Rector\AbstractRector;
|
16 | 11 | use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
|
@@ -38,9 +33,9 @@ public function getRuleDefinition(): RuleDefinition
|
38 | 33 | <<<'CODE_SAMPLE'
|
39 | 34 | use Illuminate\Database\Eloquent\Builder;
|
40 | 35 |
|
41 |
| -$builder->latest(); |
42 | 36 | $builder->oldest();
|
43 |
| -$builder->latest('deleted_at'); |
| 37 | +$builder->latest(); |
| 38 | +$builder->oldest('deleted_at'); |
44 | 39 | CODE_SAMPLE
|
45 | 40 | ,
|
46 | 41 | ),
|
@@ -71,44 +66,44 @@ private function isOrderByMethodCall(MethodCall $methodCall): bool
|
71 | 66 | // Check if it's a method call to `orderBy`
|
72 | 67 |
|
73 | 68 | return $this->isObjectType($methodCall->var, new ObjectType('Illuminate\Database\Query\Builder'))
|
74 |
| - && $methodCall->name instanceof Identifier |
| 69 | + && $methodCall->name instanceof Node\Identifier |
75 | 70 | && ($methodCall->name->name === 'orderBy' || $methodCall->name->name === 'orderByDesc')
|
76 |
| - && $methodCall->args !== []; |
| 71 | + && count($methodCall->args) > 0; |
77 | 72 | }
|
78 | 73 |
|
79 | 74 | private function convertOrderByToLatest(MethodCall $methodCall): MethodCall
|
80 | 75 | {
|
81 |
| - if (! isset($methodCall->args[0]) && ! $methodCall->args[0] instanceof VariadicPlaceholder) { |
| 76 | + if (! isset($methodCall->args[0]) && ! $methodCall->args[0] instanceof Node\VariadicPlaceholder) { |
82 | 77 | return $methodCall;
|
83 | 78 | }
|
84 | 79 |
|
85 | 80 | $columnVar = $methodCall->args[0]->value ?? null;
|
86 |
| - if (! $columnVar instanceof Expr) { |
| 81 | + if ($columnVar === null) { |
87 | 82 | return $methodCall;
|
88 | 83 | }
|
89 | 84 |
|
90 | 85 | $direction = $methodCall->args[1]->value->value ?? 'asc';
|
91 | 86 | if ($this->isName($methodCall->name, 'orderByDesc')) {
|
92 |
| - $newMethod = 'oldest'; |
| 87 | + $newMethod = 'latest'; |
93 | 88 | } else {
|
94 |
| - $newMethod = $direction === 'asc' ? 'latest' : 'oldest'; |
| 89 | + $newMethod = $direction === 'asc' ? 'oldest' : 'latest'; |
95 | 90 | }
|
96 |
| - if ($columnVar instanceof String_ && $columnVar->value === 'created_at') { |
97 |
| - $methodCall->name = new Identifier($newMethod); |
| 91 | + if ($columnVar instanceof Node\Scalar\String_ && $columnVar->value === 'created_at') { |
| 92 | + $methodCall->name = new Node\Identifier($newMethod); |
98 | 93 | $methodCall->args = [];
|
99 | 94 |
|
100 | 95 | return $methodCall;
|
101 | 96 | }
|
102 | 97 |
|
103 |
| - if ($columnVar instanceof String_) { |
104 |
| - $methodCall->name = new Identifier($newMethod); |
105 |
| - $methodCall->args = [new Arg(new String_($columnVar->value))]; |
| 98 | + if ($columnVar instanceof Node\Scalar\String_) { |
| 99 | + $methodCall->name = new Node\Identifier($newMethod); |
| 100 | + $methodCall->args = [new Node\Arg(new Node\Scalar\String_($columnVar->value))]; |
106 | 101 |
|
107 | 102 | return $methodCall;
|
108 | 103 | }
|
109 | 104 |
|
110 |
| - $methodCall->name = new Identifier($newMethod); |
111 |
| - $methodCall->args = [new Arg($columnVar)]; |
| 105 | + $methodCall->name = new Node\Identifier($newMethod); |
| 106 | + $methodCall->args = [new Node\Arg($columnVar)]; |
112 | 107 |
|
113 | 108 | return $methodCall;
|
114 | 109 | }
|
|
0 commit comments