Skip to content

Commit 0a50195

Browse files
committed
Improve infer types
1 parent 8267902 commit 0a50195

File tree

9 files changed

+34
-25
lines changed

9 files changed

+34
-25
lines changed

src/DomainTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public function testToUnicodeThrowsException(): void
4545
public function testDomainInternalPhpMethod(): void
4646
{
4747
$domain = Domain::fromIDNA2008('www.ulb.ac.be');
48+
/** @var Domain $generateDomain */
4849
$generateDomain = eval('return '.var_export($domain, true).';');
4950
self::assertEquals($domain, $generateDomain);
5051
self::assertSame(['be', 'ac', 'ulb', 'www'], iterator_to_array($domain));

src/Idna.php

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
namespace Pdp;
66

77
use UnexpectedValueException;
8+
use function defined;
9+
use function function_exists;
810
use function idn_to_ascii;
911
use function idn_to_utf8;
1012
use function preg_match;
@@ -67,11 +69,14 @@ final class Idna
6769
/**
6870
* @codeCoverageIgnore
6971
*/
70-
private static function supportIdna(): void
72+
private static function supportsIdna(): void
7173
{
72-
static $idn_support = null;
73-
$idn_support = $idn_support ?? function_exists('\idn_to_ascii') && defined('\INTL_IDNA_VARIANT_UTS46');
74-
if (!$idn_support) {
74+
static $idnSupport;
75+
if (null === $idnSupport) {
76+
$idnSupport = function_exists('\idn_to_ascii') && defined('\INTL_IDNA_VARIANT_UTS46');
77+
}
78+
79+
if (!$idnSupport) {
7580
throw new UnexpectedValueException('IDN host can not be processed. Verify that ext/intl is installed for IDN support and that ICU is at least version 4.6.');
7681
}
7782
}
@@ -90,10 +95,11 @@ public static function toAscii(string $domain, int $options): IdnaInfo
9095
return IdnaInfo::fromIntl(['result' => strtolower($domain), 'isTransitionalDifferent' => false, 'errors' => 0]);
9196
}
9297

93-
self::supportIdna();
98+
self::supportsIdna();
9499

95100
idn_to_ascii($domain, $options, INTL_IDNA_VARIANT_UTS46, $idnaInfo);
96101

102+
/* @var array{result:string, isTransitionalDifferent:bool, errors:int} $idnaInfo */
97103
return self::createIdnaInfo($domain, $idnaInfo);
98104
}
99105

@@ -110,23 +116,24 @@ public static function toUnicode(string $domain, int $options): IdnaInfo
110116
return IdnaInfo::fromIntl(['result' => $domain, 'isTransitionalDifferent' => false, 'errors' => 0]);
111117
}
112118

113-
self::supportIdna();
119+
self::supportsIdna();
114120

115121
idn_to_utf8($domain, $options, INTL_IDNA_VARIANT_UTS46, $idnaInfo);
116122

123+
/* @var array{result:string, isTransitionalDifferent:bool, errors:int} $idnaInfo */
117124
return self::createIdnaInfo($domain, $idnaInfo);
118125
}
119126

120127
/**
121-
* @param array{result:string, isTransitionalDifferent:bool, errors:int} $infos
128+
* @param array{result:string, isTransitionalDifferent:bool, errors:int} $idnaInfo
122129
*/
123-
private static function createIdnaInfo(string $domain, array $infos): IdnaInfo
130+
private static function createIdnaInfo(string $domain, array $idnaInfo): IdnaInfo
124131
{
125-
$result = IdnaInfo::fromIntl($infos);
126-
if (0 !== $result->errors()) {
127-
throw SyntaxError::dueToIDNAError($domain, $result);
132+
$info = IdnaInfo::fromIntl($idnaInfo);
133+
if (0 !== $info->errors()) {
134+
throw SyntaxError::dueToIDNAError($domain, $info);
128135
}
129136

130-
return $result;
137+
return $info;
131138
}
132139
}

src/IdnaInfoTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public function testDomainInternalPhpMethod(): void
1313
{
1414
$infos = ['result' => 'foo.bar', 'isTransitionalDifferent' => false, 'errors' => 0];
1515
$result = IdnaInfo::fromIntl($infos);
16+
/** @var IdnaInfo $generateResult */
1617
$generateResult = eval('return '.var_export($result, true).';');
1718

1819
self::assertEquals($result, $generateResult);

src/ResolvedDomainTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public function provideWrongConstructor(): iterable
6262
public function testItCanBeUsedWithInternalPhpMethod(): void
6363
{
6464
$domain = ResolvedDomain::fromICANN('www.ulb.ac.be', 2);
65+
/** @var ResolvedDomain $generateDomain */
6566
$generateDomain = eval('return '.var_export($domain, true).';');
6667
self::assertEquals($domain, $generateDomain);
6768
self::assertEquals('"www.ulb.ac.be"', json_encode($domain->jsonSerialize()));

src/Rules.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ private static function addRule(array $list, array $ruleParts): array
164164
}
165165

166166
/**
167-
* @param array{rules:array{ICANN_DOMAINS:array,PRIVATE_DOMAINS:array}} $properties
167+
* @param array{rules:array<string, array<array>>} $properties
168168
*/
169169
public static function __set_state(array $properties): self
170170
{

src/RulesTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public function testFromStringThrowsOnTypeError(): void
6363

6464
public function testDomainInternalPhpMethod(): void
6565
{
66+
/** @var Rules $generateRules */
6667
$generateRules = eval('return '.var_export(self::$rules, true).';');
6768

6869
self::assertEquals(self::$rules, $generateRules);

src/SuffixTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public function testItCanBeCreatedWithAnotherResolvedDomain(): void
2424
public function testInternalPhpMethod(): void
2525
{
2626
$publicSuffix = Suffix::fromICANN('ac.be');
27+
/** @var Suffix $generatePublicSuffix */
2728
$generatePublicSuffix = eval('return '.var_export($publicSuffix, true).';');
2829
self::assertEquals($publicSuffix, $generatePublicSuffix);
2930
self::assertEquals('"ac.be"', json_encode($publicSuffix));

src/TopLevelDomains.php

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
namespace Pdp;
66

77
use DateTimeImmutable;
8-
use DateTimeInterface;
98
use Iterator;
109
use SplTempFileObject;
1110
use TypeError;
@@ -25,15 +24,15 @@ final class TopLevelDomains implements TopLevelDomainList
2524

2625
private const REGEXP_HEADER_LINE = '/^\# Version (?<version>\d+), Last Updated (?<date>.*?)$/';
2726

28-
private DateTimeImmutable $lastUpdated;
29-
30-
private string $version;
31-
3227
/**
3328
* @var array<string, int>
3429
*/
3530
private array $records;
3631

32+
private string $version;
33+
34+
private DateTimeImmutable $lastUpdated;
35+
3736
/**
3837
* @param array<string, int> $records
3938
*/
@@ -76,18 +75,15 @@ public static function fromString($content): self
7675

7776
$data = self::parse($content);
7877

79-
/** @var DateTimeImmutable $lastUpdated */
80-
$lastUpdated = DateTimeImmutable::createFromFormat(DateTimeInterface::ATOM, $data['lastUpdated']);
81-
82-
return new self($data['records'], $data['version'], $lastUpdated);
78+
return new self($data['records'], $data['version'], $data['lastUpdated']);
8379
}
8480

8581
/**
8682
* Converts the IANA Top Level Domain List into a TopLevelDomains associative array.
8783
*
8884
* @throws UnableToLoadTopLevelDomainList if the content is invalid or can not be correctly parsed and converted
8985
*
90-
* @return array{version:string, lastUpdated:string, records:array<string,int>}
86+
* @return array{version:string, lastUpdated:DateTimeImmutable, records:array<string,int>}
9187
*/
9288
public static function parse(string $content): array
9389
{
@@ -124,7 +120,7 @@ public static function parse(string $content): array
124120
*
125121
* @throws UnableToLoadTopLevelDomainList if the Header line is invalid
126122
*
127-
* @return array{version:string, lastUpdated:string}
123+
* @return array{version:string, lastUpdated:DateTimeImmutable}
128124
*/
129125
private static function extractHeader(string $content): array
130126
{
@@ -137,7 +133,7 @@ private static function extractHeader(string $content): array
137133

138134
return [
139135
'version' => $matches['version'],
140-
'lastUpdated' => $date->format(DateTimeInterface::ATOM),
136+
'lastUpdated' => $date,
141137
];
142138
}
143139

src/TopLevelDomainsTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ public function invalidContentProvider(): iterable
140140
*/
141141
public function testSetState(): void
142142
{
143+
/** @var TopLevelDomains $topLevelDomains */
143144
$topLevelDomains = eval('return '.var_export(self::$topLevelDomains, true).';');
144145

145146
self::assertEquals(self::$topLevelDomains, $topLevelDomains);

0 commit comments

Comments
 (0)