Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
657 commits
Select commit Hold shift + click to select a range
2e0ce94
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 12, 2026
b655779
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 12, 2026
94c058d
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 13, 2026
32065b0
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 13, 2026
2f1dbad
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 13, 2026
75173b0
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 13, 2026
f1756d8
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 13, 2026
a1ff504
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 14, 2026
88b8a69
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 15, 2026
5d7995f
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 15, 2026
bd7bbec
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 15, 2026
7cb1e41
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 15, 2026
d6a4374
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes Apr 15, 2026
ec1555b
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 16, 2026
4255230
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 16, 2026
6a1b4a7
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 16, 2026
fcd10a0
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 16, 2026
c51795c
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 16, 2026
4baf3c6
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 16, 2026
b15face
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes Apr 16, 2026
3f9f695
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes Apr 17, 2026
ecfa016
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 17, 2026
cc56ab5
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 17, 2026
bce8093
Capture current ConstantArrayType inconsistencies related to sealedness
ondrejmirtes Apr 17, 2026
441e563
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 18, 2026
84db0ef
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 18, 2026
ab5ecf2
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 18, 2026
d98c69e
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 18, 2026
d5e44c7
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 19, 2026
eb16525
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 19, 2026
1ecb9f4
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 21, 2026
d8be8dd
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 21, 2026
8c1292d
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 21, 2026
a091d65
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 21, 2026
93087a6
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 21, 2026
a0084a5
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 21, 2026
451ec8c
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 21, 2026
56bfa4e
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 21, 2026
042c4a1
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 21, 2026
78e6a46
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 21, 2026
574cdcd
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 22, 2026
1b641bd
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 22, 2026
5d47f7e
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 22, 2026
8482d1b
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 22, 2026
a3639ca
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes Apr 23, 2026
c40a68e
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 23, 2026
b2423e9
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes Apr 23, 2026
6932893
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 23, 2026
aa87580
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 23, 2026
8a9fc1b
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes Apr 23, 2026
239b454
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 23, 2026
2415547
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 24, 2026
2756c7e
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 24, 2026
84013ee
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 24, 2026
8e045e8
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 24, 2026
a19973f
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 24, 2026
e569fe8
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 24, 2026
5a952cc
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 24, 2026
3ddfb84
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 25, 2026
a660652
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 25, 2026
0c15ab7
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 26, 2026
8328b06
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 26, 2026
376f52a
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 26, 2026
681e729
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 27, 2026
960d3a6
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 27, 2026
a60df60
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 27, 2026
0a66feb
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 27, 2026
27100a4
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 27, 2026
25ba4d8
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 27, 2026
a883ebf
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 27, 2026
f3ad801
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 28, 2026
7dd59eb
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 28, 2026
794e415
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 28, 2026
dd0a8c5
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 28, 2026
5f565fb
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 28, 2026
95faa95
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 28, 2026
af32820
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 28, 2026
0e505f4
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 28, 2026
d69b80b
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 29, 2026
fc399ce
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 29, 2026
d3e43d4
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 29, 2026
d8e66db
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 29, 2026
e1bece8
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 29, 2026
70ebcb1
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 29, 2026
543ac61
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 29, 2026
9fdaadd
Fix build
ondrejmirtes Apr 29, 2026
15c5a85
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 29, 2026
0a4b3b5
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 29, 2026
2f060d2
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 29, 2026
263f59b
Merge branch 2.1.x into 2.2.x
phpstan-bot Apr 29, 2026
f499d35
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes Apr 30, 2026
6265989
Merge branch 2.1.x into 2.2.x
phpstan-bot May 1, 2026
9e2f526
Merge branch 2.1.x into 2.2.x
phpstan-bot May 1, 2026
5cf8107
Merge branch 2.1.x into 2.2.x
phpstan-bot May 1, 2026
cff51bb
Merge branch 2.1.x into 2.2.x
phpstan-bot May 1, 2026
a009ea9
Merge branch 2.1.x into 2.2.x
phpstan-bot May 1, 2026
9f24850
Merge branch 2.1.x into 2.2.x
phpstan-bot May 2, 2026
02d1419
Merge branch 2.1.x into 2.2.x
phpstan-bot May 2, 2026
1f5b69e
Merge branch 2.1.x into 2.2.x
phpstan-bot May 3, 2026
7fa0112
Merge branch 2.1.x into 2.2.x
phpstan-bot May 3, 2026
8a4168d
Merge branch 2.1.x into 2.2.x
phpstan-bot May 3, 2026
01cc0a9
Merge branch 2.1.x into 2.2.x
phpstan-bot May 3, 2026
fd3263f
Merge branch 2.1.x into 2.2.x
phpstan-bot May 3, 2026
9673222
Merge branch 2.1.x into 2.2.x
phpstan-bot May 3, 2026
534f168
Merge branch 2.1.x into 2.2.x
phpstan-bot May 5, 2026
bf01c3c
Merge branch 2.1.x into 2.2.x
phpstan-bot May 5, 2026
6ef81ee
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes May 5, 2026
6e3215a
Merge branch 2.1.x into 2.2.x
phpstan-bot May 5, 2026
2fdd395
Merge branch 2.1.x into 2.2.x
phpstan-bot May 5, 2026
efa9d81
Merge branch 2.1.x into 2.2.x
phpstan-bot May 5, 2026
5782d6b
Merge branch 2.1.x into 2.2.x
phpstan-bot May 5, 2026
6191283
Merge branch 2.1.x into 2.2.x
phpstan-bot May 6, 2026
a69f7ca
Merge branch 2.1.x into 2.2.x
phpstan-bot May 7, 2026
a9ab57b
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes May 7, 2026
f92aaba
Merge branch 2.1.x into 2.2.x
phpstan-bot May 7, 2026
ff9424d
Merge branch 2.1.x into 2.2.x
phpstan-bot May 7, 2026
1c4a8b3
Add Type::toBitwiseNotType() to AccessoryDecimalIntegerStringType
ondrejmirtes May 7, 2026
118ca46
Merge branch 2.1.x into 2.2.x
phpstan-bot May 8, 2026
4e51c5a
Test result-cache restore does not trigger reflection (#5617)
staabm May 9, 2026
d6069dd
Test result-cache restore does not trigger reflection in all 1st part…
staabm May 9, 2026
e78b955
Mark `class_exists`, `interface_exists`, `trait_exists`, and `enum_ex…
phpstan-bot May 9, 2026
656b0db
Fix build (#5620)
staabm May 9, 2026
edafaad
Merge branch 2.1.x into 2.2.x
phpstan-bot May 9, 2026
54699b6
Merge branch 2.1.x into 2.2.x
phpstan-bot May 10, 2026
915f23a
Merge branch 2.1.x into 2.2.x
phpstan-bot May 10, 2026
85faddc
Merge branch 2.1.x into 2.2.x
phpstan-bot May 10, 2026
6bed1fd
Merge branch 2.1.x into 2.2.x
phpstan-bot May 10, 2026
a05911a
Merge branch 2.1.x into 2.2.x
phpstan-bot May 10, 2026
ae9cf64
Merge branch 2.1.x into 2.2.x
phpstan-bot May 10, 2026
9f3974b
Merge branch 2.1.x into 2.2.x
phpstan-bot May 10, 2026
a9ebd38
Merge branch 2.1.x into 2.2.x (#5638)
VincentLanglet May 11, 2026
460cd50
Return `null` from `ArgumentsNormalizer::reorderArgs()` when position…
phpstan-bot May 11, 2026
5de1c1b
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes May 12, 2026
9a96c41
Merge branch 2.1.x into 2.2.x
phpstan-bot May 12, 2026
b4b3527
Merge branch 2.1.x into 2.2.x
phpstan-bot May 12, 2026
df6ebaa
Merge branch 2.1.x into 2.2.x
phpstan-bot May 12, 2026
496aafe
Merge branch 2.1.x into 2.2.x
phpstan-bot May 12, 2026
ecc4192
Merge branch 2.1.x into 2.2.x
phpstan-bot May 12, 2026
71f025b
Merge branch 2.1.x into 2.2.x
phpstan-bot May 13, 2026
a38ed48
Merge branch 2.1.x into 2.2.x
phpstan-bot May 13, 2026
76733ff
Merge branch 2.1.x into 2.2.x
phpstan-bot May 13, 2026
45d6c36
Merge branch '2.1.x' into merge221
VincentLanglet May 13, 2026
2cbe82a
Merge branch 2.1.x into 2.2.x
phpstan-bot May 13, 2026
74703f0
Add CDK app for apiref.phpstan.org infrastructure
ondrejmirtes May 13, 2026
a25a45a
Flip apiref productionAlias to true, trim cutover docs from README
ondrejmirtes May 14, 2026
6054145
Merge branch 2.1.x into 2.2.x
phpstan-bot May 14, 2026
bebabbb
Apiref infra cleanup done
ondrejmirtes May 14, 2026
32cf646
Merge branch 2.1.x into 2.2.x
phpstan-bot May 14, 2026
87ce96f
Merge branch 2.1.x into 2.2.x
phpstan-bot May 14, 2026
fd8f60a
Merge branch 2.1.x into 2.2.x
phpstan-bot May 15, 2026
ef54082
Merge branch 2.1.x into 2.2.x
phpstan-bot May 15, 2026
3e4fa9c
Merge branch 2.1.x into 2.2.x
phpstan-bot May 15, 2026
35ea901
Merge branch 2.1.x into 2.2.x
phpstan-bot May 15, 2026
6fbcf55
Merge branch 2.1.x into 2.2.x
phpstan-bot May 16, 2026
6a10956
Merge branch 2.1.x into 2.2.x
phpstan-bot May 16, 2026
0d01465
Fix 2.2.x build after f2af15b571 (#5690)
staabm May 17, 2026
e6ed7c4
Memoize ArrayType->isList() (#5680)
staabm May 16, 2026
f0de7c2
Use pre-args scope for value types in array_push/array_unshift (#5579)
predictor2718 May 16, 2026
71f3515
Add regression test for circular class constant PHPDoc type reference…
phpstan-bot May 17, 2026
d5ea3cc
Use before-scope for evaluating `array_splice` argument types (#5682)
phpstan-bot May 17, 2026
9eb9b09
cs
staabm May 17, 2026
0d61041
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes May 18, 2026
7d9000b
Merge branch 2.1.x into 2.2.x
phpstan-bot May 18, 2026
55db2be
Merge branch 2.1.x into 2.2.x
phpstan-bot May 18, 2026
b4430ff
Merge branch 2.1.x into 2.2.x
phpstan-bot May 18, 2026
270bdfc
Merge branch 2.1.x into 2.2.x
phpstan-bot May 18, 2026
ec1b6f9
Merge branch 2.1.x into 2.2.x
phpstan-bot May 18, 2026
393a9a4
Merge branch 2.1.x into 2.2.x
phpstan-bot May 18, 2026
5a95e52
Merge branch 2.1.x into 2.2.x
phpstan-bot May 18, 2026
c86f75a
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes May 19, 2026
a57e75d
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes May 19, 2026
3bd3b71
Merge branch 2.1.x into 2.2.x
phpstan-bot May 19, 2026
4f5687b
Merge branch 2.1.x into 2.2.x
phpstan-bot May 19, 2026
265c41b
Merge branch 2.1.x into 2.2.x
phpstan-bot May 20, 2026
b68702d
Merge branch 2.1.x into 2.2.x
phpstan-bot May 20, 2026
0576944
Merge branch 2.1.x into 2.2.x
phpstan-bot May 20, 2026
3e258a5
Initial implementation of unsealed array shapes
ondrejmirtes Apr 17, 2026
f4a2f61
So intersecting of constant arrays works
ondrejmirtes Apr 22, 2026
183febb
Dedup code
ondrejmirtes Apr 22, 2026
b2c4d83
intersecting improvement
ondrejmirtes Apr 22, 2026
f389a5e
isSuperTypeOf
ondrejmirtes Apr 22, 2026
bb4ea57
union improvement
ondrejmirtes Apr 22, 2026
a394713
Regression tests
ondrejmirtes Apr 23, 2026
e22e420
Optimization
ondrejmirtes Apr 23, 2026
f2ddada
Remove unrelated tip
ondrejmirtes Apr 27, 2026
d2a82f6
Preserve unsealed extras when intersecting array{...} with another array
ondrejmirtes Apr 27, 2026
6b57c1e
Tip in assertNoErrors
ondrejmirtes Apr 27, 2026
77dcce4
Re-tighten bug-7963 @phpstan-return on unsealed
ondrejmirtes Apr 27, 2026
219b075
Update levels tests
ondrejmirtes Apr 28, 2026
71b347e
Refactor - allow other message to be passed from getIterableTypesWith…
ondrejmirtes Apr 28, 2026
fab9c53
Better "missing iterable value type" for unsealed types
ondrejmirtes Apr 28, 2026
9479027
Generics
ondrejmirtes Apr 28, 2026
c685b9c
Preserve array shape and make it unsealed when non-constant key is as…
ondrejmirtes Apr 29, 2026
58e0f05
Correctly generalize unsealed array shapes
ondrejmirtes Apr 30, 2026
b4700ee
Fix array_search
ondrejmirtes Apr 30, 2026
99156bf
Unsealed types awareness in more methods
ondrejmirtes Apr 28, 2026
8b2a6c6
Fix byref
ondrejmirtes May 2, 2026
612ae50
Awareness of unsealed array shape when unrolling foreach with constan…
ondrejmirtes May 2, 2026
c3e0ba2
Less `instanceof NeverType` to detect sealed array
ondrejmirtes May 2, 2026
e7a8791
Consider unsealed types in hasOffsetValueType
ondrejmirtes May 5, 2026
d960da3
makeOffsetRequired
ondrejmirtes May 6, 2026
94d65a4
Make `ConstantArrayType::filterArrayRemovingFalsey()` unsealed-aware
ondrejmirtes May 7, 2026
ace369d
Make `ConstantArrayType::changeKeyCaseArray()` unsealed-aware
ondrejmirtes May 7, 2026
7baa327
Carry unsealed slot through `array_unshift` prepend branch
ondrejmirtes May 8, 2026
52021ac
Carry unsealed slot through `count()` narrowing (unbounded max)
ondrejmirtes May 8, 2026
3f41928
Carry unsealed slots through `array_merge` all-constant fast path
ondrejmirtes May 8, 2026
bf996e0
Carry unsealed slots through `array_replace` all-constant fast path
ondrejmirtes May 8, 2026
98e8699
Carry unsealed slot through `array_filter` callback path
ondrejmirtes May 8, 2026
1a8af3e
Carry unsealed slot through `array_column` constant-array path
ondrejmirtes May 8, 2026
e215c05
Carry unsealed slot through `filter_var_array` constant-input path
ondrejmirtes May 8, 2026
e7e2c3b
Make `array_unshift` produce unsealed CAT for assoc + non-constant un…
ondrejmirtes May 8, 2026
095b8ff
Make `array_merge` slow path produce unsealed CAT for non-constant un…
ondrejmirtes May 12, 2026
4fc494b
Make `array_replace` slow path produce unsealed CAT for non-constant …
ondrejmirtes May 12, 2026
4585c2d
Preserve int-keyed values from CATs in `array_merge` slow path
ondrejmirtes May 12, 2026
1f6a697
Honour unsealed shape in `ConstantArrayType::isCallable()`
ondrejmirtes May 13, 2026
71efd0d
isConstantValue
ondrejmirtes May 18, 2026
65917b6
More ConstantArrayType methods
ondrejmirtes May 19, 2026
8202c48
Cover `ConstantArrayType::getFiniteTypes()` with a data provider
ondrejmirtes May 19, 2026
ccb668b
hasTemplateOrLateResolvableType
ondrejmirtes May 19, 2026
9ee0108
Carry unsealed slot through `ConstantArrayType::flipArray()`
ondrejmirtes May 19, 2026
805bdb8
Carry unsealed slot through `ConstantArrayType::fillKeysArray()`
ondrejmirtes May 19, 2026
ffb3adf
Carry unsealed slot through `ConstantArrayType::intersectKeyArray()`
ondrejmirtes May 19, 2026
80eadc5
Carry unsealed slot through `ConstantArrayType::reverseArray()`
ondrejmirtes May 19, 2026
b2fa4e3
Visit unsealed value in `ConstantArrayType::traverseSimultaneously()`
ondrejmirtes May 19, 2026
c919101
Make `popArray` / `removeLastElements` unsealed-aware
ondrejmirtes May 19, 2026
8c89176
Carry unsealed slot through `shiftArray` / `removeFirstElements`
ondrejmirtes May 19, 2026
fd44d98
Carry unsealed slot through `getKeysArray` / `getValuesArray`
ondrejmirtes May 19, 2026
3e49a3e
Carry unsealed slot through `ConstantArrayType::sliceArray()`
ondrejmirtes May 19, 2026
6a43069
Degrade `chunkArray` on unsealed sources to the general trait path
ondrejmirtes May 19, 2026
c726c2a
Include unsealed extras in `ConstantArrayTypeBuilder` degraded-array …
ondrejmirtes May 19, 2026
ea71a35
Carry unsealed slot through `ConstantArrayType::spliceArray()`
ondrejmirtes May 19, 2026
51b7794
Cover `ConstantArrayType::generalize()` with a data provider
ondrejmirtes May 19, 2026
f9c295a
Generalize unsealed `ConstantArrayType` instead of returning it uncha…
ondrejmirtes May 19, 2026
38b3496
Broaden unsealed value in `ConstantArrayType::generalizeValues()`
ondrejmirtes May 19, 2026
82d7754
Treat the `isList`-from-shape inference in `ConstantArrayType` symmet…
ondrejmirtes May 19, 2026
741527c
Fold unsealed extras into `array_sum()` over a constant array
ondrejmirtes May 20, 2026
d67b3a8
Skip `implode()` constant-fold for unsealed constant arrays
ondrejmirtes May 20, 2026
11b6609
Range `min()` / `max()` over unsealed extras of a constant array
ondrejmirtes May 20, 2026
6988c81
Carry unsealed slots through `array_combine()` all-constant fast path
ondrejmirtes May 20, 2026
3699e95
Bail `compact()` enumeration for unsealed name arrays
ondrejmirtes May 20, 2026
e40cef4
Treat unsealed from-encoding arrays as multi-candidate in `mb_convert…
ondrejmirtes May 20, 2026
e2d4e60
Treat legacy-null and sealed-marker as equal in `ConstantArrayType::e…
ondrejmirtes May 20, 2026
f7fb170
Unsealed array shapes
ondrejmirtes May 20, 2026
1065a0f
Preserve integer range bounds for sealed array values in loop general…
ondrejmirtes May 21, 2026
cf5b91e
Type acceptance tests
ondrejmirtes May 21, 2026
9db66d0
Fix type inference for `reportUnsafeArrayStringKeyCasting: detect`
ondrejmirtes May 21, 2026
1636fb9
Array with `int|string` in `prevent` mode should accept any string
ondrejmirtes May 21, 2026
c853aa2
Merge remote-tracking branch 'origin/2.1.x' into 2.2.x
ondrejmirtes May 21, 2026
cfba309
Merge branch 2.1.x into 2.2.x
phpstan-bot May 22, 2026
db51c39
Fix hSet/Nx function signatures
DKhalil May 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
*.stub linguist-language=PHP

tests/PHPStan/Command/ErrorFormatter/data/WindowsNewlines.php eol=crlf

.github/workflows/*.lock.yml linguist-generated=true merge=ours
96 changes: 96 additions & 0 deletions .github/workflows/apiref-infra.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# https://help.github.com/en/categories/automating-your-workflow-with-github-actions

name: "API Reference Infra"

on:
workflow_dispatch:
pull_request:
paths:
- '.github/workflows/apiref-infra.yml'
- 'apigen/infra/**'
push:
branches:
- "2.2.x"
paths:
- '.github/workflows/apiref-infra.yml'
- 'apigen/infra/**'

concurrency: apiref-infra

jobs:
test:
name: "Test"
runs-on: "ubuntu-latest"
permissions:
contents: read

steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2
with:
egress-policy: audit

- name: "Checkout"
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- name: "Install Node"
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "22"
cache: "npm"
cache-dependency-path: apigen/infra/package-lock.json

- name: "Install dependencies"
working-directory: ./apigen/infra
run: "npm ci"

- name: "TypeScript check"
working-directory: ./apigen/infra
run: "npm run check"

- name: "Unit tests"
working-directory: ./apigen/infra
run: "npm test"

- name: "CDK synth"
working-directory: ./apigen/infra
run: "npx cdk synth --all --quiet"

deploy:
name: "Deploy"
runs-on: "ubuntu-latest"
needs: test
if: "github.event_name == 'push' && github.ref == 'refs/heads/2.2.x'"
permissions:
id-token: write
contents: read

steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2
with:
egress-policy: audit

- name: "Checkout"
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- name: "Install Node"
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "22"
cache: "npm"
cache-dependency-path: apigen/infra/package-lock.json

- name: "Install dependencies"
working-directory: ./apigen/infra
run: "npm ci"

- name: "Configure AWS credentials"
uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 # v6.1.1
with:
role-to-assume: ${{ vars.APIREF_INFRA_DEPLOY_ROLE_ARN }}
aws-region: us-east-1

- name: "CDK deploy"
working-directory: ./apigen/infra
run: "npx cdk deploy --all --require-approval never"
40 changes: 18 additions & 22 deletions .github/workflows/apiref.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ on:
- 'src/**'
- 'composer.lock'
- 'apigen/**'
- '!apigen/infra/**'
- '.github/workflows/apiref.yml'

env:
Expand Down Expand Up @@ -64,43 +65,38 @@ jobs:
- apigen
if: github.repository_owner == 'phpstan'
runs-on: "ubuntu-latest"
permissions:
id-token: write
contents: read
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2
with:
egress-policy: audit

- name: "Install Node"
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "16"

- name: "Download docs"
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: docs
path: docs

- name: "Sync with S3"
uses: jakejarvis/s3-sync-action@be0c4ab89158cac4278689ebedd8407dd5f35a83 # v0.5.1
- name: "Configure AWS credentials"
uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 # v6.1.1
with:
args: --exclude '.git*/*' --follow-symlinks
env:
SOURCE_DIR: './docs'
DEST_DIR: ${{ github.ref_name }}
AWS_REGION: 'eu-west-1'
AWS_S3_BUCKET: "web-apiref.phpstan.org"
AWS_ACCESS_KEY_ID: ${{ secrets.APIREF_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.APIREF_AWS_SECRET_ACCESS_KEY }}
role-to-assume: ${{ vars.APIREF_DEPLOY_ROLE_ARN }}
aws-region: us-east-1

- name: "Sync with S3"
run: |
aws s3 sync ./docs "s3://${{ vars.APIREF_BUCKET }}/${{ github.ref_name }}" \
--exclude '.git*/*' \
--follow-symlinks

- name: "Invalidate CloudFront"
uses: chetan/invalidate-cloudfront-action@12d242edc7752fca9140c2034be28792ad22c5a8 # v2.4.1
env:
DISTRIBUTION: "E37G1C2KWNAPBD"
PATHS: '/${{ github.ref_name }}/*'
AWS_REGION: 'eu-west-1'
AWS_ACCESS_KEY_ID: ${{ secrets.APIREF_AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.APIREF_AWS_SECRET_ACCESS_KEY }}
run: |
aws cloudfront create-invalidation \
--distribution-id "${{ vars.APIREF_DISTRIBUTION_ID }}" \
--paths "/${{ github.ref_name }}/*"

- uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3.0.0
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/backward-compatibility.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
pull_request:
push:
branches:
- "2.1.x"
- "2.2.x"
paths:
- 'src/**'
- '.github/workflows/backward-compatibility.yml'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/bench.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:
- 'tests/bench/**'
push:
branches:
- "2.1.x"
- "2.2.x"
paths:
- 'src/**'
- '.github/workflows/bench.yml'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-issue-bot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
- '.github/workflows/build-issue-bot.yml'
push:
branches:
- "2.1.x"
- "2.2.x"
paths:
- 'issue-bot/**'
- '.github/workflows/build-issue-bot.yml'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/changelog-generator.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
- '.github/workflows/changelog-generator.yml'
push:
branches:
- "2.1.x"
- "2.2.x"
paths:
- 'changelog-generator/**'
- '.github/workflows/changelog-generator.yml'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: "Claude Update Config Parameters Docs On Change"

on:
push:
branches:
- "2.2.x"
paths:
- '.github/workflows/claude-update-config-parameters-docs-on-change.yml'
- 'conf/parametersSchema.neon'

jobs:
fix:
runs-on: ubuntu-latest
permissions:
contents: read
actions: write
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2
with:
egress-policy: audit

- name: Trigger Claude Update Config Parameters Docs
env:
GH_TOKEN: ${{ secrets.PHPSTAN_BOT_TOKEN }}
run: gh workflow run claude-update-config-parameters-docs.yml --repo phpstan-bot/phpstan-src
26 changes: 26 additions & 0 deletions .github/workflows/claude-update-phpdoc-tags-docs-on-change.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: "Claude Update PHPDoc Tags Docs On Change"

on:
push:
branches:
- "2.2.x"
paths:
- '.github/workflows/claude-update-phpdoc-tags-docs-on-change.yml'
- 'src/PhpDoc/PhpDocNodeResolver.php'

jobs:
fix:
runs-on: ubuntu-latest
permissions:
contents: read
actions: write
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2
with:
egress-policy: audit

- name: Trigger Claude Update PHPDoc Tags Docs
env:
GH_TOKEN: ${{ secrets.PHPSTAN_BOT_TOKEN }}
run: gh workflow run claude-update-phpdoc-tags-docs.yml --repo phpstan-bot/phpstan-src
26 changes: 26 additions & 0 deletions .github/workflows/claude-update-phpdoc-types-docs-on-change.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: "Claude Update PHPDoc Types Docs On Change"

on:
push:
branches:
- "2.2.x"
paths:
- '.github/workflows/claude-update-phpdoc-types-docs-on-change.yml'
- 'src/PhpDoc/TypeNodeResolver.php'

jobs:
fix:
runs-on: ubuntu-latest
permissions:
contents: read
actions: write
steps:
- name: Harden the runner (Audit all outbound calls)
uses: step-security/harden-runner@5ef0c079ce82195b2a36a210272d6b661572d83e # v2.14.2
with:
egress-policy: audit

- name: Trigger Claude Update PHPDoc Types Docs
env:
GH_TOKEN: ${{ secrets.PHPSTAN_BOT_TOKEN }}
run: gh workflow run claude-update-phpdoc-types-docs.yml --repo phpstan-bot/phpstan-src
8 changes: 7 additions & 1 deletion .github/workflows/e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ on:
- 'issue-bot/**'
push:
branches:
- "2.1.x"
- "2.2.x"
paths-ignore:
- 'compiler/**'
- 'apigen/**'
Expand Down Expand Up @@ -291,6 +291,12 @@ jobs:
cd e2e/bug-11857
composer install
../../bin/phpstan
- script: |
cd e2e/in-trait
OUTPUT=$(../bashunit -a exit_code "1" "../../bin/phpstan --error-format=raw")
../bashunit -a contains 'FooTrait.php:10:Strict comparison using === between int<0, max> and false will always evaluate to false.' "$OUTPUT"
../bashunit -a contains 'FooTrait.php (in context of class E2EInTrait\Bar):18:Strict comparison using === between E2EInTrait\Bar and null will always evaluate to false.' "$OUTPUT"
../bashunit -a contains 'FooTrait.php (in context of class E2EInTrait\Foo):18:Strict comparison using === between E2EInTrait\Foo and null will always evaluate to false.' "$OUTPUT"
- script: |
cd e2e/result-cache-meta-extension
composer install
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/lint-workflows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
pull_request:
push:
branches:
- "2.1.x"
- "2.2.x"

permissions: {}

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
pull_request:
push:
branches:
- "2.1.x"
- "2.2.x"

concurrency:
group: lint-${{ github.head_ref || github.run_id }} # will be canceled on subsequent pushes in pull requests but not branches
Expand Down
Loading
Loading