Skip to content

Commit e8d6c64

Browse files
authored
[Validator] use constants for Email (#900)
1 parent 2701142 commit e8d6c64

10 files changed

Lines changed: 208 additions & 0 deletions

File tree

config/sets/symfony/symfony5/symfony52/symfony52-validator.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,27 @@
44

55
use Rector\Config\RectorConfig;
66
use Rector\Symfony\Symfony52\Rector\MethodCall\ValidatorBuilderEnableAnnotationMappingRector;
7+
use Rector\Transform\Rector\Attribute\AttributeKeyToClassConstFetchRector;
8+
use Rector\Transform\ValueObject\AttributeKeyToClassConstFetch;
79

810
return static function (RectorConfig $rectorConfig): void {
911
$rectorConfig->rules([
1012
# https://github.com/symfony/symfony/blob/5.x/UPGRADE-5.2.md#validator
1113
ValidatorBuilderEnableAnnotationMappingRector::class,
1214
]);
15+
16+
// Symfony\Component\Validator\Constraints\Email::VALIDATION_MODE_* added in Symfony 4.1
17+
// When using PHP 8 attributes (available from Symfony 5.2 set), map string modes to constants
18+
$rectorConfig->ruleWithConfiguration(AttributeKeyToClassConstFetchRector::class, [
19+
new AttributeKeyToClassConstFetch(
20+
'Symfony\\Component\\Validator\\Constraints\\Email',
21+
'mode',
22+
'Symfony\\Component\\Validator\\Constraints\\Email',
23+
[
24+
'strict' => 'VALIDATION_MODE_STRICT',
25+
'loose' => 'VALIDATION_MODE_LOOSE',
26+
'html5' => 'VALIDATION_MODE_HTML5',
27+
]
28+
),
29+
]);
1330
};

config/sets/symfony/symfony6/symfony61/symfony61-validator.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
use Rector\Config\RectorConfig;
66
use Rector\Renaming\Rector\Name\RenameClassRector;
77
use Rector\Symfony\Symfony61\Rector\StaticPropertyFetch\ErrorNamesPropertyToConstantRector;
8+
use Rector\Transform\Rector\Attribute\AttributeKeyToClassConstFetchRector;
9+
use Rector\Transform\ValueObject\AttributeKeyToClassConstFetch;
810

911
return static function (RectorConfig $rectorConfig): void {
1012
$rectorConfig->rule(ErrorNamesPropertyToConstantRector::class);
@@ -13,4 +15,16 @@
1315
'Symfony\Component\Validator\Constraints\ExpressionLanguageSyntax' => 'Symfony\Component\Validator\Constraints\ExpressionSyntax',
1416
'Symfony\Component\Validator\Constraints\ExpressionLanguageSyntaxValidator' => 'Symfony\Component\Validator\Constraints\ExpressionSyntaxValidator',
1517
]);
18+
19+
// @see https://github.com/symfony/validator/blob/6.1/Constraints/Email.php
20+
$rectorConfig->ruleWithConfiguration(AttributeKeyToClassConstFetchRector::class, [
21+
new AttributeKeyToClassConstFetch(
22+
'Symfony\\Component\\Validator\\Constraints\\Email',
23+
'mode',
24+
'Symfony\\Component\\Validator\\Constraints\\Email',
25+
[
26+
'html5-allow-no-tld' => 'VALIDATION_MODE_HTML5_ALLOW_NO_TLD',
27+
]
28+
),
29+
]);
1630
};

config/sets/symfony/symfony6/symfony62.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,5 @@
3030
$rectorConfig->import(__DIR__ . '/symfony62/symfony62-doctrine-bridge.php');
3131
$rectorConfig->import(__DIR__ . '/symfony62/symfony62-messenger.php');
3232
$rectorConfig->import(__DIR__ . '/symfony62/symfony62-mail-pace-mailer.php');
33+
$rectorConfig->import(__DIR__ . '/symfony62/symfony62-validator.php');
3334
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Rector\Config\RectorConfig;
6+
use Rector\Renaming\Rector\ClassConstFetch\RenameClassConstFetchRector;
7+
use Rector\Renaming\ValueObject\RenameClassConstFetch;
8+
9+
return static function (RectorConfig $rectorConfig): void {
10+
// Symfony 6.2: Email::VALIDATION_MODE_LOOSE deprecated, use Email::VALIDATION_MODE_HTML5 instead
11+
// @see https://github.com/symfony/validator/blob/6.2/Constraints/Email.php
12+
$rectorConfig->ruleWithConfiguration(RenameClassConstFetchRector::class, [
13+
new RenameClassConstFetch(
14+
'Symfony\\Component\\Validator\\Constraints\\Email',
15+
'VALIDATION_MODE_LOOSE',
16+
'VALIDATION_MODE_HTML5'
17+
),
18+
]);
19+
};

src/Set/SetProvider/Symfony6SetProvider.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,12 @@ public function provide(): array
264264
'6.2',
265265
__DIR__ . '/../../../config/sets/symfony/symfony6/symfony62/symfony62-mail-pace-mailer.php'
266266
),
267+
new ComposerTriggeredSet(
268+
SetGroup::SYMFONY,
269+
'symfony/validator',
270+
'6.2',
271+
__DIR__ . '/../../../config/sets/symfony/symfony6/symfony62/symfony62-validator.php'
272+
),
267273

268274
new ComposerTriggeredSet(
269275
SetGroup::SYMFONY,
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
use Symfony\Component\Validator\Constraints\Email;
4+
5+
class EmailModeStrictToConst
6+
{
7+
#[Email(mode: 'strict')]
8+
public function runStrict(): void
9+
{
10+
}
11+
}
12+
13+
class EmailModeLooseToConst
14+
{
15+
#[Email(mode: 'loose')]
16+
public function runLoose(): void
17+
{
18+
}
19+
}
20+
21+
class EmailModeHtml5ToConst
22+
{
23+
#[Email(mode: 'html5')]
24+
public function runHtml5(): void
25+
{
26+
}
27+
}
28+
29+
?>
30+
-----
31+
<?php
32+
33+
use Symfony\Component\Validator\Constraints\Email;
34+
35+
class EmailModeStrictToConst
36+
{
37+
#[Email(mode: \Symfony\Component\Validator\Constraints\Email::VALIDATION_MODE_STRICT)]
38+
public function runStrict(): void
39+
{
40+
}
41+
}
42+
43+
class EmailModeLooseToConst
44+
{
45+
#[Email(mode: \Symfony\Component\Validator\Constraints\Email::VALIDATION_MODE_LOOSE)]
46+
public function runLoose(): void
47+
{
48+
}
49+
}
50+
51+
class EmailModeHtml5ToConst
52+
{
53+
#[Email(mode: \Symfony\Component\Validator\Constraints\Email::VALIDATION_MODE_HTML5)]
54+
public function runHtml5(): void
55+
{
56+
}
57+
}
58+
59+
?>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Rector\Symfony\Tests\Set\Symfony52;
6+
7+
use Iterator;
8+
use PHPUnit\Framework\Attributes\DataProvider;
9+
use Rector\Testing\PHPUnit\AbstractRectorTestCase;
10+
11+
final class Symfony52Test extends AbstractRectorTestCase
12+
{
13+
#[DataProvider('provideData')]
14+
public function test(string $filePath): void
15+
{
16+
$this->doTestFile($filePath);
17+
}
18+
19+
public static function provideData(): Iterator
20+
{
21+
return self::yieldFilesFromDirectory(__DIR__ . '/Fixture');
22+
}
23+
24+
public function provideConfigFilePath(): string
25+
{
26+
return __DIR__ . '/config/symfony52.php';
27+
}
28+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Rector\Config\RectorConfig;
6+
use Rector\Symfony\Set\SymfonySetList;
7+
8+
return static function (RectorConfig $rectorConfig): void {
9+
$rectorConfig->sets([SymfonySetList::SYMFONY_52]);
10+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
use Symfony\Component\Validator\Constraints\Email;
4+
5+
class Html5AllowNoTld
6+
{
7+
#[Email(mode: 'html5-allow-no-tld')]
8+
public function run(): void
9+
{
10+
}
11+
}
12+
13+
?>
14+
-----
15+
<?php
16+
17+
use Symfony\Component\Validator\Constraints\Email;
18+
19+
class Html5AllowNoTld
20+
{
21+
#[Email(mode: \Symfony\Component\Validator\Constraints\Email::VALIDATION_MODE_HTML5_ALLOW_NO_TLD)]
22+
public function run(): void
23+
{
24+
}
25+
}
26+
27+
?>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
use Symfony\Component\Validator\Constraints\Email;
4+
5+
class EmailModeLooseToHtml5
6+
{
7+
#[Email(mode: \Symfony\Component\Validator\Constraints\Email::VALIDATION_MODE_LOOSE)]
8+
public function run(): void
9+
{
10+
}
11+
}
12+
13+
?>
14+
-----
15+
<?php
16+
17+
use Symfony\Component\Validator\Constraints\Email;
18+
19+
class EmailModeLooseToHtml5
20+
{
21+
#[Email(mode: \Symfony\Component\Validator\Constraints\Email::VALIDATION_MODE_HTML5)]
22+
public function run(): void
23+
{
24+
}
25+
}
26+
27+
?>

0 commit comments

Comments
 (0)