Skip to content

Commit 9ffe12a

Browse files
committed
Sets up validation type
1 parent cae8b2a commit 9ffe12a

File tree

6 files changed

+278
-0
lines changed

6 files changed

+278
-0
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
<?php
2+
3+
use Rector\Config\RectorConfig;
4+
use Rector\TypeDeclaration\Rector\FunctionLike\AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector;
5+
use Rector\TypeDeclaration\ValueObject\AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration;
6+
use RectorLaravel\Rector\Param\AddParamTypeForFunctionLikeWithinCallLikeArgArrayValuesDeclarationRector;
7+
8+
return static function (RectorConfig $rectorConfig): void {
9+
$rectorConfig->import(__DIR__ . '/../../config.php');
10+
11+
$targetClasses = [
12+
'Illuminate\Support\Facades\Validator',
13+
'Illuminate\Contracts\Validation\Factory',
14+
];
15+
16+
foreach ($targetClasses as $targetClass) {
17+
$rectorConfig->ruleWithConfiguration(
18+
AddParamTypeForFunctionLikeWithinCallLikeArgArrayValuesDeclarationRector::class,
19+
[
20+
new AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration(
21+
$targetClass,
22+
'make',
23+
1,
24+
0,
25+
new \PHPStan\Type\StringType(),
26+
),
27+
new AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration(
28+
$targetClass,
29+
'make',
30+
1,
31+
1,
32+
new \PHPStan\Type\MixedType(true),
33+
),
34+
new AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration(
35+
$targetClass,
36+
'make',
37+
1,
38+
2,
39+
new \PHPStan\Type\ObjectType('Closure'),
40+
),
41+
]
42+
);
43+
}
44+
45+
$rectorConfig->ruleWithConfiguration(
46+
AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector::class,
47+
[
48+
new AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration(
49+
'Illuminate\Contracts\Validation\Validator',
50+
'after',
51+
0,
52+
0,
53+
new \PHPStan\Type\ObjectType('Illuminate\Contracts\Validation\Validator'),
54+
),
55+
]
56+
);
57+
58+
$rectorConfig->ruleWithConfiguration(
59+
AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector::class,
60+
[
61+
new AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration(
62+
'Illuminate\Contracts\Validation\Validator',
63+
'sometimes',
64+
2,
65+
0,
66+
new \PHPStan\Type\ObjectType('Illuminate\Support\Fluent'),
67+
),
68+
new AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration(
69+
'Illuminate\Contracts\Validation\Validator',
70+
'sometimes',
71+
2,
72+
1,
73+
new \PHPStan\Type\ObjectType('Illuminate\Support\Fluent'),
74+
),
75+
]
76+
);
77+
78+
$rectorConfig->ruleWithConfiguration(
79+
AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector::class,
80+
[
81+
new AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration(
82+
'Illuminate\Validation\Rule',
83+
'forEach',
84+
0,
85+
0,
86+
new \PHPStan\Type\MixedType(true),
87+
),
88+
new AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration(
89+
'Illuminate\Validation\Rule',
90+
'forEach',
91+
0,
92+
1,
93+
new \PHPStan\Type\StringType(),
94+
),
95+
]
96+
);
97+
98+
$rectorConfig->ruleWithConfiguration(
99+
AddParamTypeForFunctionLikeWithinCallLikeArgDeclarationRector::class,
100+
[
101+
new AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration(
102+
'Illuminate\Validation\Rules\Exists',
103+
'where',
104+
1,
105+
0,
106+
new \PHPStan\Type\ObjectType('Illuminate\Contracts\Database\Query\Builder'),
107+
),
108+
new AddParamTypeForFunctionLikeWithinCallLikeArgDeclaration(
109+
'Illuminate\Validation\Rules\Exists',
110+
'using',
111+
0,
112+
0,
113+
new \PHPStan\Type\ObjectType('Illuminate\Contracts\Database\Query\Builder'),
114+
),
115+
]
116+
);
117+
};
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
namespace RectorLaravel\Tests\Sets\TypeDeclaration\Validation\Fixture;
4+
5+
use Illuminate\Contracts\Validation\Factory;
6+
7+
\Illuminate\Support\Facades\Validator::make([], [
8+
'key' => [function ($attribute, $value, $fail) {
9+
$fail('The '.$attribute.' is invalid.');
10+
}],
11+
]);
12+
13+
/** @var Factory $factory */
14+
$factory->make([], [
15+
'key' => [function ($attribute, $value, $fail) {
16+
$fail('The '.$attribute.' is invalid.');
17+
}],
18+
]);
19+
20+
?>
21+
-----
22+
<?php
23+
24+
namespace RectorLaravel\Tests\Sets\TypeDeclaration\Validation\Fixture;
25+
26+
use Illuminate\Contracts\Validation\Factory;
27+
28+
\Illuminate\Support\Facades\Validator::make([], [
29+
'key' => [function (string $attribute, mixed $value, \Closure $fail) {
30+
$fail('The '.$attribute.' is invalid.');
31+
}],
32+
]);
33+
34+
/** @var Factory $factory */
35+
$factory->make([], [
36+
'key' => [function (string $attribute, mixed $value, \Closure $fail) {
37+
$fail('The '.$attribute.' is invalid.');
38+
}],
39+
]);
40+
41+
?>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace RectorLaravel\Tests\Sets\TypeDeclaration\Validation\Fixture;
4+
5+
use Illuminate\Validation\Rule;
6+
7+
Rule::forEach(function ($value, $attribute) {
8+
});
9+
10+
/** @var \Illuminate\Validation\Rules\Exists $exists */
11+
$exists->where('column', function ($query) {
12+
$query->where('column', 'value');
13+
});
14+
15+
$exists->using(function ($query) {
16+
$query->where('column', 'value');
17+
});
18+
19+
?>
20+
-----
21+
<?php
22+
23+
namespace RectorLaravel\Tests\Sets\TypeDeclaration\Validation\Fixture;
24+
25+
use Illuminate\Validation\Rule;
26+
27+
Rule::forEach(function (mixed $value, string $attribute) {
28+
});
29+
30+
/** @var \Illuminate\Validation\Rules\Exists $exists */
31+
$exists->where('column', function (\Illuminate\Contracts\Database\Query\Builder $query) {
32+
$query->where('column', 'value');
33+
});
34+
35+
$exists->using(function (\Illuminate\Contracts\Database\Query\Builder $query) {
36+
$query->where('column', 'value');
37+
});
38+
39+
?>
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
namespace RectorLaravel\Tests\Sets\TypeDeclaration\Validation\Fixture;
4+
5+
use Illuminate\Contracts\Validation\Validator;
6+
7+
/** @var Validator $validator */
8+
$validator->after(function ($validator) {
9+
if ($this->somethingElseIsInvalid()) {
10+
$validator->errors()->add(
11+
'field', 'Something is wrong with this field!'
12+
);
13+
}
14+
});
15+
16+
$validator->sometimes('reason', 'required|max:500', function ($input, $item) {
17+
return $input->games >= 100;
18+
});
19+
20+
?>
21+
-----
22+
<?php
23+
24+
namespace RectorLaravel\Tests\Sets\TypeDeclaration\Validation\Fixture;
25+
26+
use Illuminate\Contracts\Validation\Validator;
27+
28+
/** @var Validator $validator */
29+
$validator->after(function (\Illuminate\Contracts\Validation\Validator $validator) {
30+
if ($this->somethingElseIsInvalid()) {
31+
$validator->errors()->add(
32+
'field', 'Something is wrong with this field!'
33+
);
34+
}
35+
});
36+
37+
$validator->sometimes('reason', 'required|max:500', function (\Illuminate\Support\Fluent $input, \Illuminate\Support\Fluent $item) {
38+
return $input->games >= 100;
39+
});
40+
41+
?>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace RectorLaravel\Tests\Sets\TypeDeclaration\Validation;
6+
7+
use Iterator;
8+
use PHPUnit\Framework\Attributes\DataProvider;
9+
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
10+
11+
final class ValidationSetTest extends AbstractRectorTestCase
12+
{
13+
public static function provideData(): Iterator
14+
{
15+
return self::yieldFilesFromDirectory(__DIR__ . '/Fixture');
16+
}
17+
18+
/**
19+
* @test
20+
*/
21+
#[DataProvider('provideData')]
22+
public function test(string $filePath): void
23+
{
24+
$this->doTestFile($filePath);
25+
}
26+
27+
public function provideConfigFilePath(): string
28+
{
29+
return __DIR__ . '/config/configured_rule.php';
30+
}
31+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Rector\Config\RectorConfig;
6+
7+
return static function (RectorConfig $rectorConfig): void {
8+
$rectorConfig->import(__DIR__ . '/../../../../../config/sets/type-declaration/validation.php');
9+
};

0 commit comments

Comments
 (0)