Skip to content

Commit 5b92252

Browse files
committed
Fix linter issues
1 parent d773a34 commit 5b92252

File tree

4 files changed

+37
-21
lines changed

4 files changed

+37
-21
lines changed

src/Type/Builder/DateTimeFromStringTypeBuilder.php

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,34 +9,46 @@
99
use TypeLang\Parser\Node\Stmt\NamedTypeNode;
1010

1111
/**
12-
* @template TDateTime of \DateTimeInterface = \DateTimeInterface
13-
* @template-extends DateTimeTypeBuilder<TDateTime, TDateTime>
12+
* @template-extends DateTimeTypeBuilder<\DateTimeImmutable|\DateTime>
1413
*/
1514
class DateTimeFromStringTypeBuilder extends DateTimeTypeBuilder
1615
{
17-
/**
18-
* @var array<class-string<\DateTimeInterface>, class-string<\DateTimeInterface>>
19-
*/
2016
private const DATE_INTERFACE_MAPPING = [
2117
\DateTimeInterface::class => \DateTimeImmutable::class,
18+
/** @phpstan-ignore-next-line : Classes and interfaces may be missing */
2219
\Carbon\CarbonInterface::class => \Carbon\CarbonImmutable::class,
2320
];
2421

25-
protected function create(NamedTypeNode $stmt, string $class, ?string $format = null): DateTimeFromStringType
22+
/**
23+
* @param class-string<\DateTimeInterface> $class
24+
*
25+
* @return class-string<\DateTimeInterface>
26+
*/
27+
private function resolveClassName(string $class): string
2628
{
27-
if (\interface_exists($class)) {
28-
foreach (self::DATE_INTERFACE_MAPPING as $interface => $impl) {
29-
if (\is_a($interface, $class, true)) {
30-
$class = $impl;
31-
break;
32-
}
29+
if (!\interface_exists($class)) {
30+
return $class;
31+
}
32+
33+
foreach (self::DATE_INTERFACE_MAPPING as $interface => $impl) {
34+
if (\is_a($interface, $class, true)) {
35+
$class = $impl;
36+
break;
3337
}
3438
}
3539

40+
/** @var class-string<\DateTimeInterface> */
41+
return $class;
42+
}
43+
44+
protected function create(NamedTypeNode $stmt, string $class, ?string $format = null): DateTimeFromStringType
45+
{
46+
$class = $this->resolveClassName($class);
47+
3648
if (!\class_exists($class)) {
3749
throw InternalTypeException::becauseInternalTypeErrorOccurs(
3850
type: $stmt,
39-
message: 'To create a date object from a string, a class must be specified, but {{type}} is not one'
51+
message: 'To create a date object from a string, a class must be specified, but {{type}} is not one',
4052
);
4153
}
4254

src/Type/Builder/DateTimeToStringTypeBuilder.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
use TypeLang\Parser\Node\Stmt\NamedTypeNode;
99

1010
/**
11-
* @template TDateTime of \DateTimeInterface = \DateTimeInterface
12-
* @template-extends DateTimeTypeBuilder<TDateTime, string>
11+
* @template-extends DateTimeTypeBuilder<string>
1312
*/
1413
class DateTimeToStringTypeBuilder extends DateTimeTypeBuilder
1514
{

src/Type/Builder/DateTimeTypeBuilder.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
use TypeLang\Parser\Node\Stmt\TypeStatement;
1515

1616
/**
17-
* @template TDateTime of \DateTimeInterface = \DateTimeInterface
1817
* @template TResult of mixed = mixed
1918
* @template-extends Builder<NamedTypeNode, TypeInterface<TResult>>
2019
*/
@@ -34,8 +33,11 @@ public function build(
3433
$this->expectNoShapeFields($statement);
3534
$this->expectTemplateArgumentsLessOrEqualThan($statement, 1, 0);
3635

36+
/** @var class-string<\DateTimeInterface> $class */
37+
$class = $statement->name->toString();
38+
3739
if ($statement->arguments === null) {
38-
return $this->create($statement, $statement->name->toString());
40+
return $this->create($statement, $class);
3941
}
4042

4143
/** @var TemplateArgumentNode $formatArgument */
@@ -53,13 +55,13 @@ public function build(
5355

5456
return $this->create(
5557
stmt: $statement,
56-
class: $statement->name->toString(),
58+
class: $class,
5759
format: $formatArgument->value->value,
5860
);
5961
}
6062

6163
/**
62-
* @param class-string<TDateTime> $class
64+
* @param class-string<\DateTimeInterface> $class
6365
*
6466
* @return TypeInterface<TResult>
6567
*/

src/Type/DateTimeFromStringType.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use TypeLang\Mapper\Exception\Runtime\InvalidValueException;
99

1010
/**
11-
* @template TDateTime of \DateTimeInterface = \DateTimeInterface
11+
* @template TDateTime of \DateTimeImmutable|\DateTime = \DateTimeImmutable
1212
* @template-implements TypeInterface<TDateTime>
1313
*/
1414
class DateTimeFromStringType implements TypeInterface
@@ -82,8 +82,11 @@ public function cast(mixed $value, Context $context): \DateTimeInterface
8282
private function tryParseDateTime(string $value): ?\DateTimeInterface
8383
{
8484
if ($this->format !== null) {
85+
/** @var class-string<TDateTime> $class */
86+
$class = $this->class;
87+
8588
try {
86-
$result = ($this->class)::createFromFormat($this->format, $value);
89+
$result = $class::createFromFormat($this->format, $value);
8790
} catch (\Throwable) {
8891
return null;
8992
}

0 commit comments

Comments
 (0)