8000 minor #47412 [Form] Add generics to DataTransformerInterface (Vincent… · symfony/symfony@8a66294 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8a66294

Browse files
committed
minor #47412 [Form] Add generics to DataTransformerInterface (VincentLanglet)
This PR was squashed before being merged into the 6.2 branch. Discussion ---------- [Form] Add generics to DataTransformerInterface | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | no | New feature? | not really | Deprecations? | no | Tickets | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead --> | License | MIT | Doc PR | symfony/symfony-docs#... <!-- required for new features --> Now that some generics are added to the Symfony codebase, I think we could add more. For people using phpstan/psalm this will be helpful: - It avoid duplicating the generics in both psalm-plugin/phpstan-plugin - It avoid duplicating code between symfony and plugins - When phpstan/psalm report an error it's less confusing to look for the generic in the symfony file rather the plugin one. You can look at the current generic definition for psalm https://github.com/psalm/psalm-plugin-symfony/blob/master/src/Stubs/common/Component/Form/DataTransformerInterface.stubphp for phpstan https://github.com/phpstan/phpstan-symfony/blob/1.2.x/stubs/Symfony/Component/Form/DataTransformerInterface.stub Commits ------- dff26d3 [Form] Add generics to DataTransformerInterface
2 parents 7ceea07 + dff26d3 commit 8a66294

25 files changed

+62
-8
lines changed

src/Symfony/Bridge/Doctrine/Form/DataTransformer/CollectionToArrayTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
/**
2020
* @author Bernhard Schussek <bschussek@gmail.com>
21+
*
22+
* @implements DataTransformerInterface<Collection, array>
2123
*/
2224
class CollectionToArrayTransformer implements DataTransformerInterface
2325
{

src/Symfony/Component/Form/DataTransformerInterface.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
* Transforms a value between different representations.
1818
*
1919
* @author Bernhard Schussek <bschussek@gmail.com>
20+
*
21+
* @template TValue
22+
* @template TTransformedValue
2023
*/
2124
interface DataTransformerInterface
2225
{
@@ -53,9 +56,9 @@ interface DataTransformerInterface
5356
* of the first data transformer outputs NULL, the second must be able to
5457
* process that value.
5558
*
56-
* @param mixed $value The value in the original representation
59+
* @param TValue|null $value The value in the original representation
5760
*
58-
* @return mixed
61+
* @return TTransformedValue|null
5962
*
6063
* @throws TransformationFailedException when the transformation fails
6164
*/
@@ -82,9 +85,9 @@ public function transform(mixed $value);
8285
* By convention, reverseTransform() should return NULL if an empty string
8386
* is passed.
8487
*
85-
* @param mixed $value The value in the transformed representation
88+
* @param TTransformedValue|null $value The value in the transformed representation
8689
*
87-
* @return mixed
90+
* @return TValue|null
8891
*
8992
* @throws TransformationFailedException when the transformation fails
9093
*/

src/Symfony/Component/Form/Extension/Core/DataTransformer/ArrayToPartsTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
/**
1818
* @author Bernhard Schussek <bschussek@gmail.com>
19+
*
20+
* @implements DataTransformerInterface<array, array>
1921
*/
2022
class ArrayToPartsTransformer implements DataTransformerInterface
2123
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/BaseDateTimeTransformer.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
use Symfony\Component\Form\DataTransformerInterface;
1515
use Symfony\Component\Form\Exception\InvalidArgumentException;
1616

17+
/**
18+
* @template TTransformedValue
19+
* @implements DataTransformerInterface<\DateTimeInterface, TTransformedValue>
20+
*/
1721
abstract class BaseDateTimeTransformer implements DataTransformerInterface
1822
{
1923
protected static $formats = [

src/Symfony/Component/Form/Extension/Core/DataTransformer/BooleanToStringTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
*
2121
* @author Bernhard Schussek <bschussek@gmail.com>
2222
* @author Florian Eckerstorfer <florian@eckerstorfer.org>
23+
*
24+
* @implements DataTransformerInterface<bool, string>
2325
*/
2426
class BooleanToStringTransformer implements DataTransformerInterface
2527
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/ChoiceToValueTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
/**
1919
* @author Bernhard Schussek <bschussek@gmail.com>
20+
*
21+
* @implements DataTransformerInterface<string, string>
2022
*/
2123
class ChoiceToValueTransformer implements DataTransformerInterface
2224
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/ChoicesToValuesTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
/**
1919
* @author Bernhard Schussek <bschussek@gmail.com>
20+
*
21+
* @implements DataTransformerInterface<array, array>
2022
*/
2123
class ChoicesToValuesTransformer implements DataTransformerInterface
2224
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/DateIntervalToArrayTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
* Transforms between a normalized date interval and an interval string/array.
2020
*
2121
* @author Steffen Roßkamp <steffen.rosskamp@gimmickmedia.de>
22+
*
23+
* @implements DataTransformerInterface<\DateInterval, array>
2224
*/
2325
class DateIntervalToArrayTransformer implements DataTransformerInterface
2426
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/DateIntervalToStringTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
* Transforms between a date string and a DateInterval object.
2020
*
2121
* @author Steffen Roßkamp <steffen.rosskamp@gimmickmedia.de>
22+
*
23+
* @implements DataTransformerInterface<\DateInterval, string>
2224
*/
2325
class DateIntervalToStringTransformer implements DataTransformerInterface
2426
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
* Transforms between a DateTimeImmutable object and a DateTime object.
1919
*
2020
* @author Valentin Udaltsov <udaltsov.valentin@gmail.com>
21+
*
22+
* @implements DataTransformerInterface<\DateTimeImmutable, \DateTime>
2123
*/
2224
final class DateTimeImmutableToDateTimeTransformer implements DataTransformerInterface
2325
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToArrayTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*
1919
* @author Bernhard Schussek <bschussek@gmail.com>
2020
* @author Florian Eckerstorfer <florian@eckerstorfer.org>
21+
*
22+
* @extends BaseDateTimeTransformer<array>
2123
*/
2224
class DateTimeToArrayTransformer extends BaseDateTimeTransformer
2325
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToHtml5LocalDateTimeTransformer.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
* @author Franz Wilding <franz.wilding@me.com>
1818
* @author Bernhard Schussek <bschussek@gmail.com>
1919
* @author Fred Cox <mcfedr@gmail.com>
20+
*
21+
* @extends BaseDateTimeTransformer<string>
2022
*/
2123
class DateTimeToHtml5LocalDateTimeTransformer extends BaseDateTimeTransformer
2224
{
@@ -29,7 +31,7 @@ class DateTimeToHtml5LocalDateTimeTransformer extends BaseDateTimeTransformer
2931
* input is an RFC3339 date followed by 'T', followed by an RFC3339 time.
3032
* https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-local-date-and-time-string
3133
*
32-
* @param \DateTime|\DateTimeInterface $dateTime A DateTime object
34+
* @param \DateTimeInterface $dateTime
3335
*
3436
* @throws TransformationFailedException If the given value is not an
3537
* instance of \DateTime or \DateTimeInterface
@@ -40,8 +42,8 @@ public function transform(mixed $dateTime): string
4042
return '';
4143
}
4244

43-
if (!$dateTime instanceof \DateTime && !$dateTime instanceof \DateTimeInterface) {
44-
throw new TransformationFailedException('Expected a \DateTime or \DateTimeInterface.');
45+
if (!$dateTime instanceof \DateTimeInterface) {
46+
throw new TransformationFailedException('Expected a \DateTimeInterface.');
4547
}
4648

4749
if ($this->inputTimezone !== $this->outputTimezone) {

src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformer.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
*
2020
* @author Bernhard Schussek <bschussek@gmail.com>
2121
* @author Florian Eckerstorfer <florian@eckerstorfer.org>
22+
*
23+
* @extends BaseDateTimeTransformer<string>
2224
*/
2325
class DateTimeToLocalizedStringTransformer extends BaseDateTimeTransformer
2426
{
@@ -95,7 +97,7 @@ public function transform(mixed $dateTime): string
9597
/**
9698
* Transforms a localized date string/array into a normalized date.
9799
*
98-
* @param string|array $value Localized date string/array
100+
* @param string $value Localized date string
99101
*
100102
* @throws TransformationFailedException if the given value is not a string,
101103
* if the date could not be parsed

src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToRfc3339Transformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
/**
1717
* @author Bernhard Schussek <bschussek@gmail.com>
18+
*
19+
* @extends BaseDateTimeTransformer<string>
1820
*/
1921
class DateTimeToRfc3339Transformer extends BaseDateTimeTransformer
2022
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToStringTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*
1919
* @author Bernhard Schussek <bschussek@gmail.com>
2020
* @author Florian Eckerstorfer <florian@eckerstorfer.org>
21+
*
22+
* @extends BaseDateTimeTransformer<string>
2123
*/
2224
class DateTimeToStringTransformer extends BaseDateTimeTransformer
2325
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToTimestampTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*
1919
* @author Bernhard Schussek <bschussek@gmail.com>
2020
* @author Florian Eckerstorfer <florian@eckerstorfer.org>
21+
*
22+
* @extends BaseDateTimeTransformer<int|numeric-string>
2123
*/
2224
class DateTimeToTimestampTransformer extends BaseDateTimeTransformer
2325
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeZoneToStringTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
* Transforms between a timezone identifier string and a DateTimeZone object.
1919
*
2020
* @author Roland Franssen <franssen.roland@gmail.com>
21+
*
22+
* @implements DataTransformerInterface<\DateTimeZone|array<\DateTimeZone>, string|array<string>>
2123
*/
2224
class DateTimeZoneToStringTransformer implements DataTransformerInterface
2325
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/IntlTimeZoneToStringTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
* Transforms between a timezone identifier string and a IntlTimeZone object.
1919
*
2020
* @author Roland Franssen <franssen.roland@gmail.com>
21+
*
22+
* @implements DataTransformerInterface<\IntlTimeZone|array<\IntlTimeZone>, string|array<string>>
2123
*/
2224
class IntlTimeZoneToStringTransformer implements DataTransformerInterface
2325
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
*
2121
* @author Bernhard Schussek <bschussek@gmail.com>
2222
* @author Florian Eckerstorfer <florian@eckerstorfer.org>
23+
*
24+
* @implements DataTransformerInterface<int|float, string>
2325
*/
2426
class NumberToLocalizedStringTransformer implements DataTransformerInterface
2527
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/PercentToLocalizedStringTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
*
2121
* @author Bernhard Schussek <bschussek@gmail.com>
2222
* @author Florian Eckerstorfer <florian@eckerstorfer.org>
23+
*
24+
* @implements DataTransformerInterface<int|float, string>
2325
*/
2426
class PercentToLocalizedStringTransformer implements DataTransformerInterface
2527
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/StringToFloatTransformer.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
use Symfony\Component\Form\DataTransformerInterface;
1515
use Symfony\Component\Form\Exception\TransformationFailedException;
1616

17+
/**
18+
* @implements DataTransformerInterface<numeric-string, float>
19+
*/
1720
class StringToFloatTransformer implements DataTransformerInterface
1821
{
1922
private ?int $scale;

src/Symfony/Component/Form/Extension/Core/DataTransformer/UlidToStringTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
* Transforms between a ULID string and a Ulid object.
2020
*
2121
* @author Pavel Dyakonov <wapinet@mail.ru>
22+
*
23+
* @implements DataTransformerInterface<Ulid, string>
2224
*/
2325
class UlidToStringTransformer implements DataTransformerInterface
2426
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/UuidToStringTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
* Transforms between a UUID string and a Uuid object.
2020
*
2121
* @author Pavel Dyakonov <wapinet@mail.ru>
22+
*
23+
* @implements DataTransformerInterface<Uuid, string>
2224
*/
2325
class UuidToStringTransformer implements DataTransformerInterface
2426
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/ValueToDuplicatesTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
/**
1818
* @author Bernhard Schussek <bschussek@gmail.com>
19+
*
20+
* @implements DataTransformerInterface<mixed, array>
1921
*/
2022
class ValueToDuplicatesTransformer implements DataTransformerInterface
2123
{

src/Symfony/Component/Form/Extension/Core/DataTransformer/WeekToArrayTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
* Transforms between an ISO 8601 week date string and an array.
1919
*
2020
* @author Damien Fayet <damienf1521@gmail.com>
21+
*
22+
* @implements DataTransformerInterface<string, array{year: int|null, week: int|null}>
2123
*/
2224
class WeekToArrayTransformer implements DataTransformerInterface
2325
{

0 commit comments

Comments
 (0)
0