Skip to content

Commit 4279f35

Browse files
ondrejmirtesclaude
andcommitted
Add regression test for #8636
Closes phpstan/phpstan#8636 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent e1acb89 commit 4279f35

2 files changed

Lines changed: 322 additions & 0 deletions

File tree

tests/PHPStan/Rules/Methods/ReturnTypeRuleTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,11 @@ public function testBug2885(): void
377377
$this->analyse([__DIR__ . '/data/bug-2885.php'], []);
378378
}
379379

380+
public function testBug8636(): void
381+
{
382+
$this->analyse([__DIR__ . '/data/bug-8636.php'], []);
383+
}
384+
380385
public function testMergeInheritedPhpDocs(): void
381386
{
382387
$this->analyse([__DIR__ . '/data/merge-inherited-return.php'], [
Lines changed: 317 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,317 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Bug8636;
4+
5+
final class Config
6+
{
7+
public const SIMPLE_CONST = [
8+
'at' => [
9+
'p1' => 'en',
10+
'p2' => 'Austria',
11+
'p3' => 'b',
12+
'p4' => 'de_AT',
13+
'p5' => 'EUR',
14+
'p6' => 'https://',
15+
'p7' => 'https://',
16+
'p8' => [],
17+
'p9' => ['a', 'a', 'a'],
18+
],
19+
];
20+
21+
public const HUGE_CONST = [
22+
'at' => [
23+
'p1' => 'en',
24+
'p2' => 'Austria',
25+
'p3' => 'b',
26+
'p4' => 'de_AT',
27+
'p5' => 'EUR',
28+
'p6' => 'https://',
29+
'p7' => 'https://',
30+
'p8' => [],
31+
'p9' => ['a', 'a', 'a'],
32+
],
33+
34+
'au' => [
35+
'p1' => 'en',
36+
'p2' => 'Australia',
37+
'p3' => 'b',
38+
'p4' => 'en_AU',
39+
'p5' => 'AUD',
40+
'p6' => 'https://',
41+
'p7' => 'https://',
42+
'p8' => [],
43+
'p9' => ['a', 'a'],
44+
],
45+
46+
'be' => [
47+
'p1' => 'fr',
48+
'p2' => 'Belgium',
49+
'p3' => 'b',
50+
'p4' => 'fr_BE',
51+
'p5' => 'EUR',
52+
'p6' => 'https://',
53+
'p7' => 'https://',
54+
'p8' => [],
55+
'p9' => ['a', 'a', 'a'],
56+
],
57+
58+
'bx' => [
59+
'p1' => 'en',
60+
'p2' => 'Belgium',
61+
'p3' => 'b',
62+
'p4' => 'nl_BE',
63+
'p5' => 'EUR',
64+
'p6' => 'https://',
65+
'p7' => 'https://',
66+
'p8' => [],
67+
'p9' => ['a', 'a', 'a'],
68+
],
69+
70+
'ca' => [
71+
'p1' => 'en',
72+
'p2' => 'Canada',
73+
'p3' => 'b',
74+
'p4' => 'en_CA',
75+
'p5' => 'CAD',
76+
'p6' => 'https://',
77+
'p7' => 'https://',
78+
'p8' => [],
79+
'p9' => ['a', 'a', 'a'],
80+
],
81+
82+
'xf' => [
83+
'p1' => 'fr',
84+
'p2' => 'Canada',
85+
'p3' => 'b',
86+
'p4' => 'fr_CA',
87+
'p5' => 'CAD',
88+
'p6' => 'https://',
89+
'p7' => 'https://',
90+
'p8' => [],
91+
'p9' => ['a', 'a', 'a'],
92+
],
93+
94+
'ch' => [
95+
'p1' => 'fr',
96+
'p2' => 'Switzerland',
97+
'p3' => 'b',
98+
'p4' => 'fr_CH',
99+
'p5' => 'CHF',
100+
'p6' => 'https://',
101+
'p7' => 'https://',
102+
'p8' => [],
103+
'p9' => ['a', 'a'],
104+
],
105+
106+
'cx' => [
107+
'p1' => 'en',
108+
'p2' => 'Switzerland',
109+
'p3' => 'b',
110+
'p4' => 'de_CH',
111+
'p5' => 'CHF',
112+
'p6' => 'https://',
113+
'p7' => 'https://',
114+
'p8' => [],
115+
'p9' => ['a', 'a', 'a'],
116+
],
117+
118+
'cn' => [
119+
'p1' => 'en',
120+
'p2' => 'China',
121+
'p3' => 'b',
122+
'p4' => 'zh_CN',
123+
'p5' => 'CNY',
124+
'p6' => 'https://',
125+
'p7' => 'https://',
126+
'p8' => [],
127+
'p9' => ['a'],
128+
],
129+
130+
'de' => [
131+
'p1' => 'en',
132+
'p2' => 'Germany',
133+
'p3' => 'b',
134+
'p4' => 'de_DE',
135+
'p5' => 'EUR',
136+
'p6' => 'https://',
137+
'p7' => 'https://',
138+
'p8' => [],
139+
'p9' => ['a', 'a', 'a'],
140+
],
141+
142+
'es' => [
143+
'p1' => 'en',
144+
'p2' => 'Spain',
145+
'p3' => 'b',
146+
'p4' => 'es_ES',
147+
'p5' => 'EUR',
148+
'p6' => 'https://',
149+
'p7' => 'https://',
150+
'p8' => [],
151+
'p9' => ['a', 'a', 'a'],
152+
],
153+
154+
'fr' => [
155+
'p1' => 'fr',
156+
'p2' => 'France',
157+
'p3' => 'b',
158+
'p4' => 'fr_FR',
159+
'p5' => 'EUR',
160+
'p6' => 'https://',
161+
'p7' => 'https://',
162+
'p8' => [],
163+
'p9' => ['a', 'a'],
164+
],
165+
166+
'hk' => [
167+
'p1' => 'en',
168+
'p2' => 'Hong-Kong',
169+
'p3' => 'b',
170+
'p4' => 'en_HK',
171+
'p5' => 'HKD',
172+
'p6' => 'https://',
173+
'p7' => 'https://',
174+
'p8' => [],
175+
'p9' => ['a', 'a', 'a'],
176+
],
177+
178+
'hz' => [
179+
'p1' => 'en',
180+
'p2' => 'Hong-Kong',
181+
'p3' => 'b',
182+
'p4' => 'zh_HK',
183+
'p5' => 'HKD',
184+
'p6' => 'https://',
185+
'p7' => 'https://',
186+
'p8' => [],
187+
'p9' => ['a', 'a', 'a'],
188+
],
189+
190+
'ie' => [
191+
'p1' => 'en',
192+
'p2' => 'Ireland',
193+
'p3' => 'b',
194+
'p4' => 'en_IE',
195+
'p5' => 'EUR',
196+
'p6' => 'https://',
197+
'p7' => 'https://',
198+
'p8' => [],
199+
'p9' => ['a', 'a', 'a'],
200+
],
201+
202+
'it' => [
203+
'p1' => 'en',
204+
'p2' => 'Italy',
205+
'p3' => 'b',
206+
'p4' => 'it_IT',
207+
'p5' => 'EUR',
208+
'p6' => 'https://',
209+
'p7' => 'https://',
210+
'p8' => [],
211+
'p9' => ['a', 'a', 'a'],
212+
],
213+
214+
'jp' => [
215+
'p1' => 'en',
216+
'p2' => 'Japan',
217+
'p3' => 'b',
218+
'p4' => 'ja_JP',
219+
'p5' => 'JPY',
220+
'p6' => 'https://',
221+
'p7' => 'https://',
222+
'p8' => [],
223+
'p9' => ['a', 'a', 'a'],
224+
],
225+
226+
'kr' => [
227+
'p1' => 'en',
228+
'p2' => 'South Korea',
229+
'p3' => 'b',
230+
'p4' => 'ko_KR',
231+
'p5' => 'KRW',
232+
'p6' => 'https://',
233+
'p7' => 'https://',
234+
'p8' => [],
235+
'p9' => ['a', 'a', 'a'],
236+
],
237+
238+
'nl' => [
239+
'p1' => 'en',
240+
'p2' => 'Netherlands',
241+
'p3' => 'b',
242+
'p4' => 'nl_NL',
243+
'p5' => 'EUR',
244+
'p6' => 'https://',
245+
'p7' => 'https://',
246+
'p8' => [],
247+
'p9' => ['a', 'a', 'a'],
248+
],
249+
250+
'nz' => [
251+
'p1' => 'en',
252+
'p2' => 'New Zealand',
253+
'p3' => 'b',
254+
'p4' => 'en_NZ',
255+
'p5' => 'NZD',
256+
'p6' => 'https://',
257+
'p7' => 'https://',
258+
'p8' => [],
259+
'p9' => ['a', 'a', 'a'],
260+
],
261+
262+
'pl' => [
263+
'p1' => 'en',
264+
'p2' => 'Poland',
265+
'p3' => 'b',
266+
'p4' => 'pl_PL',
267+
'p5' => 'PLN',
268+
'p6' => 'https://',
269+
'p7' => 'https://',
270+
'p8' => [],
271+
'p9' => ['a', 'a', 'a'],
272+
],
273+
274+
'sg' => [
275+
'p1' => 'en',
276+
'p2' => 'Singapore',
277+
'p3' => 'b',
278+
'p4' => 'en_SG',
279+
'p5' => 'SGD',
280+
'p6' => 'https://',
281+
'p7' => 'https://',
282+
'p8' => [],
283+
'p9' => ['a', 'a', 'a'],
284+
],
285+
286+
'tw' => [
287+
'p1' => 'en',
288+
'p2' => 'Taiwan',
289+
'p3' => 'b',
290+
'p4' => 'zh_TW',
291+
'p5' => 'TWD',
292+
'p6' => 'https://',
293+
'p7' => 'https://',
294+
'p8' => [],
295+
'p9' => ['a', 'a', 'a'],
296+
],
297+
298+
];
299+
300+
public function simple(string $c, string $r): string
301+
{
302+
return str_replace(
303+
'a',
304+
'b',
305+
self::SIMPLE_CONST[$c]['p7'],
306+
);
307+
}
308+
309+
public function huge(string $c, string $r): string
310+
{
311+
return str_replace(
312+
'a',
313+
'b',
314+
self::HUGE_CONST[$c]['p7'],
315+
);
316+
}
317+
}

0 commit comments

Comments
 (0)