Skip to content

Commit 5b4bf80

Browse files
committed
Merge remote-tracking branch 'origin/1.12.x' into 2.1.x
2 parents 199466f + 6e87a98 commit 5b4bf80

9 files changed

+321
-217
lines changed

tests/PHPStan/Analyser/LegacyNodeScopeResolverTest.php

Lines changed: 0 additions & 171 deletions
Original file line numberDiff line numberDiff line change
@@ -5217,14 +5217,6 @@ public function testArrayFunctions(
52175217

52185218
public static function dataFunctions(): array
52195219
{
5220-
$strSplitDefaultReturnType = 'non-empty-list<string>|false';
5221-
if (PHP_VERSION_ID >= 80000) {
5222-
$strSplitDefaultReturnType = 'non-empty-list<string>';
5223-
}
5224-
if (PHP_VERSION_ID >= 80200) {
5225-
$strSplitDefaultReturnType = 'list<string>';
5226-
}
5227-
52285220
return [
52295221
[
52305222
'string',
@@ -5414,42 +5406,6 @@ public static function dataFunctions(): array
54145406
'(array{sec: int, usec: int, minuteswest: int, dsttime: int}|float)',
54155407
'$gettimeofdayBenevolent',
54165408
],
5417-
[
5418-
$strSplitDefaultReturnType,
5419-
'$strSplitConstantStringWithoutDefinedParameters',
5420-
],
5421-
[
5422-
'array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}',
5423-
'$strSplitConstantStringWithoutDefinedSplitLength',
5424-
],
5425-
[
5426-
PHP_VERSION_ID < 80200 ? 'non-empty-list<string>' : 'list<string>',
5427-
'$strSplitStringWithoutDefinedSplitLength',
5428-
],
5429-
[
5430-
'array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}',
5431-
'$strSplitConstantStringWithOneSplitLength',
5432-
],
5433-
[
5434-
'array{\'abcdef\'}',
5435-
'$strSplitConstantStringWithGreaterSplitLengthThanStringLength',
5436-
],
5437-
[
5438-
'false',
5439-
'$strSplitConstantStringWithFailureSplitLength',
5440-
],
5441-
[
5442-
$strSplitDefaultReturnType,
5443-
'$strSplitConstantStringWithInvalidSplitLengthType',
5444-
],
5445-
[
5446-
"array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}",
5447-
'$strSplitConstantStringWithVariableStringAndConstantSplitLength',
5448-
],
5449-
[
5450-
$strSplitDefaultReturnType,
5451-
'$strSplitConstantStringWithVariableStringAndVariableSplitLength',
5452-
],
54535409
// parse_url
54545410
[
54555411
'array|int|string|false|null',
@@ -8772,133 +8728,6 @@ public function testPhp73Functions(
87728728
);
87738729
}
87748730

8775-
public static function dataPhp74Functions(): array
8776-
{
8777-
return [
8778-
[
8779-
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
8780-
'$mbStrSplitConstantStringWithoutDefinedParameters',
8781-
],
8782-
[
8783-
'array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}',
8784-
'$mbStrSplitConstantStringWithoutDefinedSplitLength',
8785-
],
8786-
[
8787-
'list<string>',
8788-
'$mbStrSplitStringWithoutDefinedSplitLength',
8789-
],
8790-
[
8791-
'array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}',
8792-
'$mbStrSplitConstantStringWithOneSplitLength',
8793-
],
8794-
[
8795-
'array{\'abcdef\'}',
8796-
'$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLength',
8797-
],
8798-
[
8799-
'false',
8800-
'$mbStrSplitConstantStringWithFailureSplitLength',
8801-
],
8802-
[
8803-
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
8804-
'$mbStrSplitConstantStringWithInvalidSplitLengthType',
8805-
],
8806-
[
8807-
"array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}",
8808-
'$mbStrSplitConstantStringWithVariableStringAndConstantSplitLength',
8809-
],
8810-
[
8811-
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
8812-
'$mbStrSplitConstantStringWithVariableStringAndVariableSplitLength',
8813-
],
8814-
[
8815-
"array{'a', 'b', 'c', 'd', 'e', 'f'}",
8816-
'$mbStrSplitConstantStringWithOneSplitLengthAndValidEncoding',
8817-
],
8818-
[
8819-
'false',
8820-
'$mbStrSplitConstantStringWithOneSplitLengthAndInvalidEncoding',
8821-
],
8822-
[
8823-
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
8824-
'$mbStrSplitConstantStringWithOneSplitLengthAndVariableEncoding',
8825-
],
8826-
[
8827-
"array{'abcdef'}",
8828-
'$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndValidEncoding',
8829-
],
8830-
[
8831-
'false',
8832-
'$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndInvalidEncoding',
8833-
],
8834-
[
8835-
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
8836-
'$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndVariableEncoding',
8837-
],
8838-
[
8839-
'false',
8840-
'$mbStrSplitConstantStringWithFailureSplitLengthAndValidEncoding',
8841-
],
8842-
[
8843-
'false',
8844-
'$mbStrSplitConstantStringWithFailureSplitLengthAndInvalidEncoding',
8845-
],
8846-
[
8847-
'false',
8848-
'$mbStrSplitConstantStringWithFailureSplitLengthAndVariableEncoding',
8849-
],
8850-
[
8851-
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
8852-
'$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndValidEncoding',
8853-
],
8854-
[
8855-
'false',
8856-
'$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding',
8857-
],
8858-
[
8859-
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
8860-
'$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndVariableEncoding',
8861-
],
8862-
[
8863-
"array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}",
8864-
'$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndValidEncoding',
8865-
],
8866-
[
8867-
'false',
8868-
'$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndInvalidEncoding',
8869-
],
8870-
[
8871-
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
8872-
'$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndVariableEncoding',
8873-
],
8874-
[
8875-
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
8876-
'$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndValidEncoding',
8877-
],
8878-
[
8879-
'false',
8880-
'$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndInvalidEncoding',
8881-
],
8882-
[
8883-
PHP_VERSION_ID < 80000 ? 'list<string>|false' : 'list<string>',
8884-
'$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding',
8885-
],
8886-
];
8887-
}
8888-
8889-
#[DataProvider('dataPhp74Functions')]
8890-
public function testPhp74Functions(
8891-
string $description,
8892-
string $expression,
8893-
): void
8894-
{
8895-
$this->assertTypes(
8896-
__DIR__ . '/data/php74_functions.php',
8897-
$description,
8898-
$expression,
8899-
);
8900-
}
8901-
89028731
public static function dataUnionMethods(): array
89038732
{
89048733
return [

tests/PHPStan/Analyser/NodeScopeResolverTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,19 @@ private static function findTestFiles(): iterable
5252
}
5353
}
5454

55+
if (PHP_VERSION_ID >= 80200) {
56+
yield __DIR__ . '/data/str-split-php82.php';
57+
} elseif (PHP_VERSION_ID >= 80000) {
58+
yield __DIR__ . '/data/str-split-php80.php';
59+
} else {
60+
yield __DIR__ . '/data/str-split-php74.php';
61+
}
62+
if (PHP_VERSION_ID >= 80000) {
63+
yield __DIR__ . '/data/mb-str-split-php80.php';
64+
} elseif (PHP_VERSION_ID >= 74000) {
65+
yield __DIR__ . '/data/mb-str-split-php74.php';
66+
}
67+
5568
yield __DIR__ . '/../Rules/Methods/data/bug-6856.php';
5669

5770
if (PHP_VERSION_ID < 80000) {

tests/PHPStan/Analyser/data/functions.php

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,6 @@
5656
$gettimeofdayDefault = gettimeofday(null);
5757
$gettimeofdayBenevolent = gettimeofday($undefined);
5858

59-
// str_split
60-
/** @var string $string */
61-
$string = doFoo();
62-
$strSplitConstantStringWithoutDefinedParameters = str_split();
63-
$strSplitConstantStringWithoutDefinedSplitLength = str_split('abcdef');
64-
$strSplitStringWithoutDefinedSplitLength = str_split($string);
65-
$strSplitConstantStringWithOneSplitLength = str_split('abcdef', 1);
66-
$strSplitConstantStringWithGreaterSplitLengthThanStringLength = str_split('abcdef', 999);
67-
$strSplitConstantStringWithFailureSplitLength = str_split('abcdef', 0);
68-
$strSplitConstantStringWithInvalidSplitLengthType = str_split('abcdef', []);
69-
$strSplitConstantStringWithVariableStringAndConstantSplitLength = str_split(doFoo() ? 'abcdef' : 'ghijkl', 1);
70-
$strSplitConstantStringWithVariableStringAndVariableSplitLength = str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2);
71-
7259
// parse_url
7360
/** @var int $integer */
7461
$integer = doFoo();
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?php
2+
3+
namespace MbStrSplitPHP74;
4+
5+
use function PHPStan\Testing\assertType;
6+
7+
class MbStrSplit {
8+
public function legacyTest(): void
9+
{
10+
/** @var string $string */
11+
$string = doFoo();
12+
13+
$mbStrSplitConstantStringWithoutDefinedParameters = mb_str_split();
14+
assertType('list<string>|false', $mbStrSplitConstantStringWithoutDefinedParameters);
15+
16+
$mbStrSplitConstantStringWithoutDefinedSplitLength = mb_str_split('abcdef');
17+
assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $mbStrSplitConstantStringWithoutDefinedSplitLength);
18+
19+
$mbStrSplitStringWithoutDefinedSplitLength = mb_str_split($string);
20+
assertType('list<string>', $mbStrSplitStringWithoutDefinedSplitLength);
21+
22+
$mbStrSplitConstantStringWithOneSplitLength = mb_str_split('abcdef', 1);
23+
assertType('array{\'a\', \'b\', \'c\', \'d\', \'e\', \'f\'}', $mbStrSplitConstantStringWithOneSplitLength);
24+
25+
$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLength = mb_str_split('abcdef', 999);
26+
assertType('array{\'abcdef\'}', $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLength);
27+
28+
$mbStrSplitConstantStringWithFailureSplitLength = mb_str_split('abcdef', 0);
29+
assertType('false', $mbStrSplitConstantStringWithFailureSplitLength);
30+
31+
$mbStrSplitConstantStringWithInvalidSplitLengthType = mb_str_split('abcdef', []);
32+
assertType('list<string>|false', $mbStrSplitConstantStringWithInvalidSplitLengthType);
33+
34+
$mbStrSplitConstantStringWithVariableStringAndConstantSplitLength = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1);
35+
assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", $mbStrSplitConstantStringWithVariableStringAndConstantSplitLength);
36+
37+
$mbStrSplitConstantStringWithVariableStringAndVariableSplitLength = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2);
38+
assertType('list<string>|false', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLength);
39+
40+
$mbStrSplitConstantStringWithOneSplitLengthAndValidEncoding = mb_str_split('abcdef', 1, 'UTF-8');
41+
assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}", $mbStrSplitConstantStringWithOneSplitLengthAndValidEncoding);
42+
43+
$mbStrSplitConstantStringWithOneSplitLengthAndInvalidEncoding = mb_str_split('abcdef', 1, 'FAKE');
44+
assertType('false', $mbStrSplitConstantStringWithOneSplitLengthAndInvalidEncoding);
45+
46+
$mbStrSplitConstantStringWithOneSplitLengthAndVariableEncoding = mb_str_split('abcdef', 1, doFoo());
47+
assertType('list<string>|false', $mbStrSplitConstantStringWithOneSplitLengthAndVariableEncoding);
48+
49+
$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndValidEncoding = mb_str_split('abcdef', 999, 'UTF-8');
50+
assertType("array{'abcdef'}", $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndValidEncoding);
51+
52+
$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndInvalidEncoding = mb_str_split('abcdef', 999, 'FAKE');
53+
assertType('false', $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndInvalidEncoding);
54+
55+
$mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndVariableEncoding = mb_str_split('abcdef', 999, doFoo());
56+
assertType('list<string>|false', $mbStrSplitConstantStringWithGreaterSplitLengthThanStringLengthAndVariableEncoding);
57+
58+
$mbStrSplitConstantStringWithFailureSplitLengthAndValidEncoding = mb_str_split('abcdef', 0, 'UTF-8');
59+
assertType('false', $mbStrSplitConstantStringWithFailureSplitLengthAndValidEncoding);
60+
61+
$mbStrSplitConstantStringWithFailureSplitLengthAndInvalidEncoding = mb_str_split('abcdef', 0, 'FAKE');
62+
assertType('false', $mbStrSplitConstantStringWithFailureSplitLengthAndInvalidEncoding);
63+
64+
$mbStrSplitConstantStringWithFailureSplitLengthAndVariableEncoding = mb_str_split('abcdef', 0, doFoo());
65+
assertType('false', $mbStrSplitConstantStringWithFailureSplitLengthAndVariableEncoding);
66+
67+
$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndValidEncoding = mb_str_split('abcdef', [], 'UTF-8');
68+
assertType('list<string>|false', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndValidEncoding);
69+
70+
$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding = mb_str_split('abcdef', [], 'FAKE');
71+
assertType('false', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndInvalidEncoding);
72+
73+
$mbStrSplitConstantStringWithInvalidSplitLengthTypeAndVariableEncoding = mb_str_split('abcdef', [], doFoo());
74+
assertType('list<string>|false', $mbStrSplitConstantStringWithInvalidSplitLengthTypeAndVariableEncoding);
75+
76+
$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndValidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1, 'UTF-8');
77+
assertType("array{'a', 'b', 'c', 'd', 'e', 'f'}|array{'g', 'h', 'i', 'j', 'k', 'l'}", $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndValidEncoding);
78+
79+
$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndInvalidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1, 'FAKE');
80+
assertType('false', $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndInvalidEncoding);
81+
82+
$mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndVariableEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', 1, doFoo());
83+
assertType('list<string>|false', $mbStrSplitConstantStringWithVariableStringAndConstantSplitLengthAndVariableEncoding);
84+
85+
$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndValidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, 'UTF-8');
86+
assertType('list<string>|false', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndValidEncoding);
87+
88+
$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndInvalidEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, 'FAKE');
89+
assertType('false', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndInvalidEncoding);
90+
91+
$mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding = mb_str_split(doFoo() ? 'abcdef' : 'ghijkl', doFoo() ? 1 : 2, doFoo());
92+
assertType('list<string>|false', $mbStrSplitConstantStringWithVariableStringAndVariableSplitLengthAndVariableEncoding);
93+
}
94+
}

0 commit comments

Comments
 (0)