Skip to content

Commit 307cf54

Browse files
committed
feat: return union false
1 parent 79623a4 commit 307cf54

File tree

2 files changed

+18
-21
lines changed

2 files changed

+18
-21
lines changed

src/Type/Php/PregSplitDynamicReturnTypeExtension.php

+1-4
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,6 @@ public function getTypeFromFunctionCall(FunctionReflection $functionReflection,
157157
foreach ($limits as $limit) {
158158
foreach ($flags as $flag) {
159159
$result = @preg_split($patternConstantType->getValue(), $subjectConstantType->getValue(), (int) $limit, (int) $flag);
160-
if ($result === false) {
161-
return new ErrorType();
162-
}
163160
$constantArray = ConstantArrayTypeBuilder::createEmpty();
164161
foreach ($result as $key => $value) {
165162
if (is_array($value)) {
@@ -178,7 +175,7 @@ public function getTypeFromFunctionCall(FunctionReflection $functionReflection,
178175
}
179176
}
180177
}
181-
178+
$resultTypes[] = new ConstantBooleanType(false);
182179
return TypeCombinator::union(...$resultTypes);
183180
}
184181

tests/PHPStan/Analyser/nsrt/preg_split.php

+17-17
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,21 @@ class HelloWorld
1111

1212
public function doFoo()
1313
{
14-
assertType("array{''}", preg_split('/-/', ''));
15-
assertType("array{}", preg_split('/-/', '', -1, PREG_SPLIT_NO_EMPTY));
16-
assertType("array{'1', '-', '2', '-', '3'}", preg_split('/ *(-) */', '1- 2-3', -1, PREG_SPLIT_DELIM_CAPTURE));
17-
assertType("array{array{'', 0}}", preg_split('/-/', '', -1, PREG_SPLIT_OFFSET_CAPTURE));
18-
assertType("array{}", preg_split('/-/', '', -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE));
19-
assertType("array{'1', '2', '3'}", preg_split('/-/', '1-2-3'));
20-
assertType("array{'1', '2', '3'}", preg_split('/-/', '1-2-3', -1, PREG_SPLIT_NO_EMPTY));
21-
assertType("array{'1', '3'}", preg_split('/-/', '1--3', -1, PREG_SPLIT_NO_EMPTY));
22-
assertType("array{array{'1', 0}, array{'2', 2}, array{'3', 4}}", preg_split('/-/', '1-2-3', -1, PREG_SPLIT_OFFSET_CAPTURE));
23-
assertType("array{array{'1', 0}, array{'2', 2}, array{'3', 4}}", preg_split('/-/', '1-2-3', -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE));
24-
assertType("array{array{'1', 0}, array{'', 2}, array{'3', 3}}", preg_split('/-/', '1--3', -1, PREG_SPLIT_OFFSET_CAPTURE));
25-
assertType("array{array{'1', 0}, array{'3', 3}}", preg_split('/-/', '1--3', -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE));
26-
27-
assertType("array{'1', '2', '3'}", preg_split('/-/', '1-2-3', self::NUMERIC_STRING_NEGATIVE_1));
28-
assertType("array{'1', '2', '3'}", preg_split('/-/', '1-2-3', -1, self::NUMERIC_STRING_1));
14+
assertType("array{''}|false", preg_split('/-/', ''));
15+
assertType("array{}|false", preg_split('/-/', '', -1, PREG_SPLIT_NO_EMPTY));
16+
assertType("array{'1', '-', '2', '-', '3'}|false", preg_split('/ *(-) */', '1- 2-3', -1, PREG_SPLIT_DELIM_CAPTURE));
17+
assertType("array{array{'', 0}}|false", preg_split('/-/', '', -1, PREG_SPLIT_OFFSET_CAPTURE));
18+
assertType("array{}|false", preg_split('/-/', '', -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE));
19+
assertType("array{'1', '2', '3'}|false", preg_split('/-/', '1-2-3'));
20+
assertType("array{'1', '2', '3'}|false", preg_split('/-/', '1-2-3', -1, PREG_SPLIT_NO_EMPTY));
21+
assertType("array{'1', '3'}|false", preg_split('/-/', '1--3', -1, PREG_SPLIT_NO_EMPTY));
22+
assertType("array{array{'1', 0}, array{'2', 2}, array{'3', 4}}|false", preg_split('/-/', '1-2-3', -1, PREG_SPLIT_OFFSET_CAPTURE));
23+
assertType("array{array{'1', 0}, array{'2', 2}, array{'3', 4}}|false", preg_split('/-/', '1-2-3', -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE));
24+
assertType("array{array{'1', 0}, array{'', 2}, array{'3', 3}}|false", preg_split('/-/', '1--3', -1, PREG_SPLIT_OFFSET_CAPTURE));
25+
assertType("array{array{'1', 0}, array{'3', 3}}|false", preg_split('/-/', '1--3', -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE));
26+
27+
assertType("array{'1', '2', '3'}|false", preg_split('/-/', '1-2-3', self::NUMERIC_STRING_NEGATIVE_1));
28+
assertType("array{'1', '2', '3'}|false", preg_split('/-/', '1-2-3', -1, self::NUMERIC_STRING_1));
2929
}
3030

3131
public function doWithError() {
@@ -40,8 +40,8 @@ public function doWithError() {
4040

4141
public function doWithVariables(string $pattern, string $subject, int $offset, int $flags): void
4242
{
43-
assertType("array{'1', '2', '3'}|array{'1-2-3'}", preg_split('/-/', '1-2-3', $this->generate()));
44-
assertType("array{'1', '2', '3'}|array{'1-2-3'}", preg_split('/-/', '1-2-3', $this->generate(), $this->generate()));
43+
assertType("array{'1', '2', '3'}|array{'1-2-3'}|false", preg_split('/-/', '1-2-3', $this->generate()));
44+
assertType("array{'1', '2', '3'}|array{'1-2-3'}|false", preg_split('/-/', '1-2-3', $this->generate(), $this->generate()));
4545

4646
assertType('list<array{string, int<0, max>}|string>|false', preg_split($pattern, $subject, $offset, $flags));
4747
assertType('list<array{string, int<0, max>}|string>|false', preg_split("//", $subject, $offset, $flags));

0 commit comments

Comments
 (0)