@@ -15,73 +15,78 @@ Feature: Eloquent Builder types
15
15
</plugins>
16
16
</psalm>
17
17
"""
18
+ And I have the following code preamble
19
+ """
20
+ <?php declare(strict_types=1);
21
+ namespace Tests\Psalm\LaravelPlugin\Sandbox;
22
+
23
+ use Illuminate\Database\Eloquent\Builder;
24
+ use Illuminate\Database\Eloquent\Collection;
25
+ use Tests\Psalm\LaravelPlugin\Models\User;
26
+ """
18
27
19
28
Scenario : Models can call eloquent query builder instance methods
20
29
Given I have the following code
21
30
"""
22
- <?php declare(strict_types=1);
23
-
24
- use Tests\Psalm\LaravelPlugin\Models\User;
25
-
26
31
final class UserRepository
27
32
{
28
33
29
34
/**
30
- * @return \Illuminate\Database\Eloquent\ Builder<User>
35
+ * @return Builder<User>
31
36
*/
32
- public function getNewQuery(): \Illuminate\Database\Eloquent\ Builder
37
+ public function getNewQuery(): Builder
33
38
{
34
39
return User::query();
35
40
}
36
41
37
42
/**
38
- * @return \Illuminate\Database\Eloquent\ Builder<User>
43
+ * @return Builder<User>
39
44
*/
40
- public function getNewModelQuery(): \Illuminate\Database\Eloquent\ Builder
45
+ public function getNewModelQuery(): Builder
41
46
{
42
47
return (new User())->newModelQuery();
43
48
}
44
49
45
50
/**
46
- * @param \Illuminate\Database\Eloquent\ Builder<User> $builder
51
+ * @param Builder<User> $builder
47
52
*/
48
- public function firstOrFailFromBuilderInstance(\Illuminate\Database\Eloquent\ Builder $builder): User {
53
+ public function firstOrFailFromBuilderInstance(Builder $builder): User {
49
54
return $builder->firstOrFail();
50
55
}
51
56
52
57
/**
53
- * @param \Illuminate\Database\Eloquent\ Builder<User> $builder
58
+ * @param Builder<User> $builder
54
59
*/
55
- public function findOrFailFromBuilderInstance(\Illuminate\Database\Eloquent\ Builder $builder): User {
60
+ public function findOrFailFromBuilderInstance(Builder $builder): User {
56
61
return $builder->findOrFail(1);
57
62
}
58
63
59
64
/**
60
- * @param \Illuminate\Database\Eloquent\ Builder<User> $builder
61
- * @return \Illuminate\Database\Eloquent\ Collection<User>
65
+ * @param Builder<User> $builder
66
+ * @return Collection<User>
62
67
*/
63
- public function findMultipleOrFailFromBuilderInstance(\Illuminate\Database\Eloquent\ Builder $builder): \Illuminate\Database\Eloquent\ Collection {
68
+ public function findMultipleOrFailFromBuilderInstance(Builder $builder): Collection {
64
69
return $builder->findOrFail([1, 2]);
65
70
}
66
71
67
72
/**
68
- * @param \Illuminate\Database\Eloquent\ Builder<User> $builder
73
+ * @param Builder<User> $builder
69
74
*/
70
- public function findOne(\Illuminate\Database\Eloquent\ Builder $builder): ?User {
75
+ public function findOne(Builder $builder): ?User {
71
76
return $builder->find(1);
72
77
}
73
78
74
79
/**
75
- * @param \Illuminate\Database\Eloquent\ Builder<User> $builder
80
+ * @param Builder<User> $builder
76
81
*/
77
- public function findViaArray(\Illuminate\Database\Eloquent\ Builder $builder): \Illuminate\Database\Eloquent\ Collection {
82
+ public function findViaArray(Builder $builder): Collection {
78
83
return $builder->find([1]);
79
84
}
80
85
81
86
/**
82
- * @return \Illuminate\Database\Eloquent\ Builder<User>
87
+ * @return Builder<User>
83
88
*/
84
- public function getWhereBuilderViaInstance(array $attributes): \Illuminate\Database\Eloquent\ Builder {
89
+ public function getWhereBuilderViaInstance(array $attributes): Builder {
85
90
return (new User())->where($attributes);
86
91
}
87
92
}
@@ -90,10 +95,16 @@ Feature: Eloquent Builder types
90
95
Then I see no errors
91
96
92
97
Scenario : can call static methods on model
93
- Given I have the following code
98
+ Given I have the following code preamble
94
99
"""
95
100
<?php declare(strict_types=1);
96
101
102
+ use Illuminate\Database\Eloquent\Builder;
103
+ use Illuminate\Database\Eloquent\Collection;
104
+ """
105
+ And I have the following code
106
+ """
107
+
97
108
final class User extends \Illuminate\Database\Eloquent\Model {
98
109
protected $table = 'users';
99
110
};
@@ -102,17 +113,17 @@ Feature: Eloquent Builder types
102
113
{
103
114
104
115
/**
105
- * @return \Illuminate\Database\Eloquent\ Builder<User>
116
+ * @return Builder<User>
106
117
*/
107
- public function getWhereBuilderViaStatic(array $attributes): \Illuminate\Database\Eloquent\ Builder
118
+ public function getWhereBuilderViaStatic(array $attributes): Builder
108
119
{
109
120
return User::where($attributes);
110
121
}
111
122
112
123
/**
113
- * @psalm-return \Illuminate\Database\Eloquent\ Collection<User>
124
+ * @psalm-return Collection<User>
114
125
*/
115
- public function getWhereViaStatic(array $attributes): \Illuminate\Database\Eloquent\ Collection
126
+ public function getWhereViaStatic(array $attributes): Collection
116
127
{
117
128
return User::where($attributes)->get();
118
129
}
@@ -122,20 +133,25 @@ Feature: Eloquent Builder types
122
133
Then I see no errors
123
134
124
135
Scenario :
125
- Given I have the following code
136
+ Given I have the following code preamble
126
137
"""
127
138
<?php declare(strict_types=1);
128
139
129
- final class User extends \Illuminate\Database\Eloquent\Model {
140
+ use Illuminate\Database\Eloquent\Builder;
141
+ use Illuminate\Database\Eloquent\Model;
142
+ """
143
+ And I have the following code
144
+ """
145
+ final class User extends Model {
130
146
protected $table = 'users';
131
147
};
132
148
133
149
final class UserRepository
134
150
{
135
151
/**
136
- * @return \Illuminate\Database\Eloquent\ Builder<User>
152
+ * @return Builder<User>
137
153
*/
138
- public function test_failure(): \Illuminate\Database\Eloquent\ Builder
154
+ public function test_failure(): Builder
139
155
{
140
156
return User::fakeQueryMethodThatDoesntExist();
141
157
}
@@ -150,11 +166,6 @@ Feature: Eloquent Builder types
150
166
Scenario : can call methods on underlying query builder
151
167
Given I have the following code
152
168
"""
153
- <?php declare(strict_types=1);
154
-
155
- use Tests\Psalm\LaravelPlugin\Models\User;
156
- use \Illuminate\Database\Eloquent\Builder;
157
-
158
169
/**
159
170
* @psalm-param Builder<User> $builder
160
171
* @psalm-return Builder<User>
@@ -170,11 +181,6 @@ Feature: Eloquent Builder types
170
181
Given I have the "laravel/framework" package satisfying the "6.*"
171
182
And I have the following code
172
183
"""
173
- <?php declare(strict_types=1);
174
-
175
- use Tests\Psalm\LaravelPlugin\Models\User;
176
- use \Illuminate\Database\Eloquent\Builder;
177
-
178
184
/**
179
185
* @psalm-param Builder<User> $builder
180
186
* @psalm-return User
@@ -201,11 +207,6 @@ Feature: Eloquent Builder types
201
207
Given I have the "laravel/framework" package satisfying the ">= 8.0"
202
208
And I have the following code
203
209
"""
204
- <?php declare(strict_types=1);
205
-
206
- use Tests\Psalm\LaravelPlugin\Models\User;
207
- use Illuminate\Database\Eloquent\Builder;
208
-
209
210
/**
210
211
* @psalm-param Builder<User> $builder
211
212
* @psalm-return User
0 commit comments