Skip to content

Commit ad3402b

Browse files
authored
[type-declaration-docblocks] Generalize unioned array item (#7285)
* fixtures * generalize unioned array item
1 parent 4fe59c0 commit ad3402b

10 files changed

Lines changed: 302 additions & 29 deletions

File tree

rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/AddParamArrayDocblockFromDataProviderRector/Fixture/complex_case.php.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ use PHPUnit\Framework\TestCase;
6262
final class ComplexCase extends TestCase
6363
{
6464
/**
65-
* @param array<string, array<'anotherKey', int>> $first
65+
* @param array<string, array<string, int>> $first
6666
* @param array<string, int> $second
6767
*/
6868
#[DataProvider('getData')]

rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/avoid_extreme_nesting.php.inc renamed to rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/Nesting/avoid_extreme_nesting.php.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture;
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture\Nesting;
44

55
final class AvoidExtremeNesting
66
{
@@ -26,7 +26,7 @@ final class AvoidExtremeNesting
2626
-----
2727
<?php
2828

29-
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture;
29+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture\Nesting;
3030

3131
final class AvoidExtremeNesting
3232
{

rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/complex_array.php.inc renamed to rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/Nesting/complex_array.php.inc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture;
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture\Nesting;
44

55
class ComplexArray
66
{
@@ -26,12 +26,12 @@ class ComplexArray
2626
-----
2727
<?php
2828

29-
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture;
29+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture\Nesting;
3030

3131
class ComplexArray
3232
{
3333
/**
34-
* @return array<string, \stdClass|array<string, int|string|array<string, string>>>
34+
* @return array<string, mixed>
3535
*/
3636
public function run(): array
3737
{

rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/two_nested_levels.php.inc renamed to rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/Nesting/two_nested_levels.php.inc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture;
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture\Nesting;
44

55
final class TwoNestedLevels
66
{
@@ -23,7 +23,7 @@ final class TwoNestedLevels
2323
-----
2424
<?php
2525

26-
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture;
26+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture\Nesting;
2727

2828
final class TwoNestedLevels
2929
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
<?php
2+
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture\Nesting;
4+
5+
final class UnionNest
6+
{
7+
public function getData(): array
8+
{
9+
return [
10+
'field1' => 1111,
11+
'field2' => 22,
12+
'field3' => [
13+
'field1' => 'value1',
14+
],
15+
'field4' => 9,
16+
'field5' => '50/50',
17+
'field6' => true,
18+
'field7' => 'value2',
19+
'field8' => [
20+
0 => [
21+
'field1' => [
22+
'field1' => 123.4,
23+
'field2' => 200.0,
24+
'field3' => 200.0,
25+
'field4' => 10.0,
26+
'field5' => 9.0,
27+
'field6' => 210.0,
28+
'field7' => 209.0,
29+
'field8' => 3.0,
30+
'field9' => 0.0,
31+
'field10' => 123.4,
32+
],
33+
'field2' => [
34+
0 => [
35+
'field1' => 3.0,
36+
],
37+
],
38+
'field3' => [
39+
0 => [
40+
'field1' => 0.0,
41+
],
42+
],
43+
'field4' => false,
44+
'field5' => false,
45+
'field6' => [
46+
0 => [
47+
'field1' => 'value3',
48+
],
49+
],
50+
'field7' => [
51+
'field1' => 'value4',
52+
],
53+
'field8' => [],
54+
'field9' => [
55+
0 => [
56+
'field1' => 123.4,
57+
'field2' => 200.0,
58+
'field3' => 200.0,
59+
'field4' => 10.0,
60+
'field5' => 9.0,
61+
'field6' => 210.0,
62+
'field7' => 209.0,
63+
'field8' => 3.0,
64+
'field9' => 0.0,
65+
'field10' => 123.4,
66+
],
67+
],
68+
'field10' => [],
69+
'field11' => [
70+
'field1' => '2000-01-01T00:00:00+0000',
71+
'field2' => '2000-01-01T00:00:00+0000',
72+
'field3' => '2000-01-01T00:00:00+0000',
73+
'field4' => '2000-01-01T00:00:00+0000',
74+
'field5' => '2000-01-01T00:00:00+0000',
75+
'field6' => '2000-01-01T00:00:00+0000',
76+
'field7' => '2000-01-01T00:00:00+0000',
77+
'field8' => '2000-01-01T00:00:00+0000',
78+
],
79+
'field12' => 'value5',
80+
'field13' => [],
81+
],
82+
],
83+
'field9' => [
84+
'value6',
85+
'value7',
86+
],
87+
'field10' => [
88+
'value8',
89+
'value9',
90+
],
91+
'field11' => true,
92+
'field12' => 'value10',
93+
];
94+
}
95+
}
96+
97+
?>
98+
-----
99+
<?php
100+
101+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockReturnArrayFromDirectArrayInstanceRector\Fixture\Nesting;
102+
103+
final class UnionNest
104+
{
105+
/**
106+
* @return array<string, mixed>
107+
*/
108+
public function getData(): array
109+
{
110+
return [
111+
'field1' => 1111,
112+
'field2' => 22,
113+
'field3' => [
114+
'field1' => 'value1',
115+
],
116+
'field4' => 9,
117+
'field5' => '50/50',
118+
'field6' => true,
119+
'field7' => 'value2',
120+
'field8' => [
121+
0 => [
122+
'field1' => [
123+
'field1' => 123.4,
124+
'field2' => 200.0,
125+
'field3' => 200.0,
126+
'field4' => 10.0,
127+
'field5' => 9.0,
128+
'field6' => 210.0,
129+
'field7' => 209.0,
130+
'field8' => 3.0,
131+
'field9' => 0.0,
132+
'field10' => 123.4,
133+
],
134+
'field2' => [
135+
0 => [
136+
'field1' => 3.0,
137+
],
138+
],
139+
'field3' => [
140+
0 => [
141+
'field1' => 0.0,
142+
],
143+
],
144+
'field4' => false,
145+
'field5' => false,
146+
'field6' => [
147+
0 => [
148+
'field1' => 'value3',
149+
],
150+
],
151+
'field7' => [
152+
'field1' => 'value4',
153+
],
154+
'field8' => [],
155+
'field9' => [
156+
0 => [
157+
'field1' => 123.4,
158+
'field2' => 200.0,
159+
'field3' => 200.0,
160+
'field4' => 10.0,
161+
'field5' => 9.0,
162+
'field6' => 210.0,
163+
'field7' => 209.0,
164+
'field8' => 3.0,
165+
'field9' => 0.0,
166+
'field10' => 123.4,
167+
],
168+
],
169+
'field10' => [],
170+
'field11' => [
171+
'field1' => '2000-01-01T00:00:00+0000',
172+
'field2' => '2000-01-01T00:00:00+0000',
173+
'field3' => '2000-01-01T00:00:00+0000',
174+
'field4' => '2000-01-01T00:00:00+0000',
175+
'field5' => '2000-01-01T00:00:00+0000',
176+
'field6' => '2000-01-01T00:00:00+0000',
177+
'field7' => '2000-01-01T00:00:00+0000',
178+
'field8' => '2000-01-01T00:00:00+0000',
179+
],
180+
'field12' => 'value5',
181+
'field13' => [],
182+
],
183+
],
184+
'field9' => [
185+
'value6',
186+
'value7',
187+
],
188+
'field10' => [
189+
'value8',
190+
'value9',
191+
],
192+
'field11' => true,
193+
'field12' => 'value10',
194+
];
195+
}
196+
}
197+
198+
?>

rules-tests/TypeDeclarationDocblocks/Rector/ClassMethod/DocblockReturnArrayFromDirectArrayInstanceRector/Fixture/covert-implicit-key.php.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace Rector\Tests\TypeDeclarationDocblocks\Rector\ClassMethod\DocblockRetur
2828
final class CoverImplicitKey
2929
{
3030
/**
31-
* @return array<int, array<string, string|int>>
31+
* @return array<int, array<string, int|string>>
3232
*/
3333
private static function getExpectedAllOwners(): array
3434
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\Class_\ClassMethodArrayDocblockParamFromLocalCallsRector\Fixture;
4+
5+
final class CoverMixedAndKnown
6+
{
7+
public function go($mixed)
8+
{
9+
$this->run(['item1', 'item2']);
10+
11+
$this->run([$mixed, $mixed]);
12+
}
13+
14+
private function run(array $items)
15+
{
16+
}
17+
}
18+
19+
?>
20+
-----
21+
<?php
22+
23+
namespace Rector\Tests\TypeDeclarationDocblocks\Rector\Class_\ClassMethodArrayDocblockParamFromLocalCallsRector\Fixture;
24+
25+
final class CoverMixedAndKnown
26+
{
27+
public function go($mixed)
28+
{
29+
$this->run(['item1', 'item2']);
30+
31+
$this->run([$mixed, $mixed]);
32+
}
33+
34+
/**
35+
* @param string[]|mixed[] $items
36+
*/
37+
private function run(array $items)
38+
{
39+
}
40+
}
41+
42+
?>

rules-tests/TypeDeclarationDocblocks/Rector/Class_/ClassMethodArrayDocblockParamFromLocalCallsRector/Fixture/skip_mixed_mixed.php.inc

Lines changed: 0 additions & 17 deletions
This file was deleted.

0 commit comments

Comments
 (0)