Skip to content

Commit 9ef39d8

Browse files
committed
fix
1 parent 1db8b35 commit 9ef39d8

File tree

2 files changed

+22
-17
lines changed

2 files changed

+22
-17
lines changed

src/Type/Php/RegexArrayShapeMatcher.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,8 +315,13 @@ private function createSubjectValueType(Type $baseType, int $flags, bool $matche
315315
$subjectValueType = TypeCombinator::removeNull($this->getValueType($baseType, $flags, $matchesAll));
316316

317317
if ($matchesAll) {
318+
$subjectValueType = TypeCombinator::removeNull($this->getValueType(new StringType(), $flags, $matchesAll));
319+
318320
if ($this->containsPatternOrder($flags)) {
319-
$subjectValueType = TypeCombinator::intersect(new ArrayType(new IntegerType(), $subjectValueType), new AccessoryArrayListType());
321+
$subjectValueType = TypeCombinator::intersect(
322+
new ArrayType(new IntegerType(), $subjectValueType),
323+
new AccessoryArrayListType()
324+
);
320325
}
321326
}
322327

tests/PHPStan/Analyser/nsrt/preg_match_all_shapes.php

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,16 @@ function (string $size): void {
2626

2727
function (string $size): void {
2828
if (preg_match_all('/ab(?P<num>\d+)?/', $size, $matches)) {
29-
assertType("array{0: list<non-empty-string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
29+
assertType("array{0: list<string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
3030
} else {
3131
assertType("array{}", $matches);
3232
}
33-
assertType("array{}|array{0: list<non-empty-string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
33+
assertType("array{}|array{0: list<string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
3434
};
3535

3636
function (string $size): void {
3737
if (preg_match_all('/ab(?P<num>\d+)?/', $size, $matches) > 0) {
38-
assertType("array{0: list<non-empty-string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
38+
assertType("array{0: list<string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
3939
} else {
4040
assertType("array{0: list<string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
4141
}
@@ -44,7 +44,7 @@ function (string $size): void {
4444

4545
function (string $size): void {
4646
if (preg_match_all('/ab(?P<num>\d+)?/', $size, $matches) != false) {
47-
assertType("array{0: list<non-empty-string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
47+
assertType("array{0: list<string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
4848
} else {
4949
assertType("array{}", $matches);
5050
}
@@ -53,7 +53,7 @@ function (string $size): void {
5353

5454
function (string $size): void {
5555
if (preg_match_all('/ab(?P<num>\d+)?/', $size, $matches) == true) {
56-
assertType("array{0: list<non-empty-string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
56+
assertType("array{0: list<string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
5757
} else {
5858
assertType("array{}", $matches);
5959
}
@@ -62,7 +62,7 @@ function (string $size): void {
6262

6363
function (string $size): void {
6464
if (preg_match_all('/ab(?P<num>\d+)?/', $size, $matches) === 1) {
65-
assertType("array{0: list<non-empty-string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
65+
assertType("array{0: list<string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
6666
} else {
6767
assertType("array{0: list<string>, num: list<''|numeric-string>, 1: list<''|numeric-string>}", $matches);
6868
}
@@ -76,55 +76,55 @@ function (string $size): void {
7676

7777
function (string $size): void {
7878
if (preg_match_all('/ab(?P<num>\d+)(?P<suffix>ab)?/', $size, $matches)) {
79-
assertType("array{0: list<non-empty-string>, num: list<numeric-string>, 1: list<numeric-string>, suffix: list<''|'ab'>, 2: list<''|'ab'>}", $matches);
79+
assertType("array{0: list<string>, num: list<numeric-string>, 1: list<numeric-string>, suffix: list<''|'ab'>, 2: list<''|'ab'>}", $matches);
8080
}
8181
};
8282

8383
function (string $size): void {
8484
if (preg_match_all('/ab(?P<num>\d+)(?P<suffix>ab)?/', $size, $matches, PREG_UNMATCHED_AS_NULL)) {
85-
assertType("array{0: list<non-empty-string>, num: list<numeric-string>, 1: list<numeric-string>, suffix: list<'ab'|null>, 2: list<'ab'|null>}", $matches);
85+
assertType("array{0: list<string>, num: list<numeric-string>, 1: list<numeric-string>, suffix: list<'ab'|null>, 2: list<'ab'|null>}", $matches);
8686
}
8787
};
8888

8989
function (string $size): void {
9090
if (preg_match_all('/ab(?P<num>\d+)(?P<suffix>ab)?/', $size, $matches, PREG_SET_ORDER)) {
91-
assertType("list<array{0: non-empty-string, num: numeric-string, 1: numeric-string, suffix?: 'ab', 2?: 'ab'}>", $matches);
91+
assertType("list<array{0: string, num: numeric-string, 1: numeric-string, suffix?: 'ab', 2?: 'ab'}>", $matches);
9292
}
9393
};
9494

9595
function (string $size): void {
9696
if (preg_match_all('/ab(?P<num>\d+)(?P<suffix>ab)?/', $size, $matches, PREG_PATTERN_ORDER)) {
97-
assertType("array{0: list<non-empty-string>, num: list<numeric-string>, 1: list<numeric-string>, suffix: list<''|'ab'>, 2: list<''|'ab'>}", $matches);
97+
assertType("array{0: list<string>, num: list<numeric-string>, 1: list<numeric-string>, suffix: list<''|'ab'>, 2: list<''|'ab'>}", $matches);
9898
}
9999
};
100100

101101
function (string $size): void {
102102
if (preg_match_all('/ab(?P<num>\d+)(?P<suffix>ab)?/', $size, $matches, PREG_UNMATCHED_AS_NULL|PREG_SET_ORDER)) {
103-
assertType("list<array{0: non-empty-string, num: numeric-string, 1: numeric-string, suffix: 'ab'|null, 2: 'ab'|null}>", $matches);
103+
assertType("list<array{0: string, num: numeric-string, 1: numeric-string, suffix: 'ab'|null, 2: 'ab'|null}>", $matches);
104104
}
105105
};
106106

107107
function (string $size): void {
108108
if (preg_match_all('/ab(?P<num>\d+)(?P<suffix>ab)?/', $size, $matches, PREG_UNMATCHED_AS_NULL|PREG_PATTERN_ORDER)) {
109-
assertType("array{0: list<non-empty-string>, num: list<numeric-string>, 1: list<numeric-string>, suffix: list<'ab'|null>, 2: list<'ab'|null>}", $matches);
109+
assertType("array{0: list<string>, num: list<numeric-string>, 1: list<numeric-string>, suffix: list<'ab'|null>, 2: list<'ab'|null>}", $matches);
110110
}
111111
};
112112

113113
function (string $size): void {
114114
if (preg_match_all('/ab(?P<num>\d+)(?P<suffix>ab)?/', $size, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE)) {
115-
assertType("list<array{0: array{non-empty-string, int<-1, max>}, num: array{numeric-string, int<-1, max>}, 1: array{numeric-string, int<-1, max>}, suffix?: array{'ab', int<-1, max>}, 2?: array{'ab', int<-1, max>}}>", $matches);
115+
assertType("list<array{0: array{string, int<-1, max>}, num: array{numeric-string, int<-1, max>}, 1: array{numeric-string, int<-1, max>}, suffix?: array{'ab', int<-1, max>}, 2?: array{'ab', int<-1, max>}}>", $matches);
116116
}
117117
};
118118

119119
function (string $size): void {
120120
if (preg_match_all('/ab(?P<num>\d+)(?P<suffix>ab)?/', $size, $matches, PREG_PATTERN_ORDER|PREG_OFFSET_CAPTURE)) {
121-
assertType("array{0: list<array{non-empty-string, int<-1, max>}>, num: list<array{numeric-string, int<-1, max>}>, 1: list<array{numeric-string, int<-1, max>}>, suffix: list<array{''|'ab', int<-1, max>}>, 2: list<array{''|'ab', int<-1, max>}>}", $matches);
121+
assertType("array{0: list<array{string, int<-1, max>}>, num: list<array{numeric-string, int<-1, max>}>, 1: list<array{numeric-string, int<-1, max>}>, suffix: list<array{''|'ab', int<-1, max>}>, 2: list<array{''|'ab', int<-1, max>}>}", $matches);
122122
}
123123
};
124124

125125
function (string $size): void {
126126
if (preg_match_all('/ab(?P<num>\d+)(?P<suffix>ab)?/', $size, $matches, PREG_UNMATCHED_AS_NULL|PREG_SET_ORDER|PREG_OFFSET_CAPTURE)) {
127-
assertType("list<array{0: array{non-empty-string|null, int<-1, max>}, num: array{numeric-string|null, int<-1, max>}, 1: array{numeric-string|null, int<-1, max>}, suffix: array{'ab'|null, int<-1, max>}, 2: array{'ab'|null, int<-1, max>}}>", $matches);
127+
assertType("list<array{0: array{string|null, int<-1, max>}, num: array{numeric-string|null, int<-1, max>}, 1: array{numeric-string|null, int<-1, max>}, suffix: array{'ab'|null, int<-1, max>}, 2: array{'ab'|null, int<-1, max>}}>", $matches);
128128
}
129129
};
130130

@@ -160,7 +160,7 @@ public function sayBar(string $content): void
160160
return;
161161
}
162162

163-
assertType('array{list<non-empty-string>}', $matches);
163+
assertType('array{list<string>}', $matches);
164164
}
165165

166166
function doFoobar(string $s): void {

0 commit comments

Comments
 (0)