| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| phpstan.phar | 2026-09-12 | 28.9 MB | |
| phpstan.phar.asc | 2026-09-12 | 833 Bytes | |
| 2.2.14 source code.tar.gz | 2026-09-12 | 12.1 MB | |
| 2.2.14 source code.zip | 2026-09-12 | 12.1 MB | |
| README.md | 2026-09-12 | 4.2 kB | |
| Totals: 5 Items | 53.1 MB | 5 | |
Improvements 🔧
- Apply
finallyscope changes to try-catch exit points and check by-ref return types afterfinally(#6393), [#13338] - Fix PHP 8.6 deprecation in hoa/consistency (#6405), thanks @SanderMuller!
Bugfixes 🐛
- Compare conditional expressions in
MutatingScope::equals()(#6344), [#15157], thanks @janedbal! - Fix
containsNull()for union withnull&T of mixed(#6390), thanks @vojtech-dobes! - Do not resolve include paths through a stream wrapper that is not registered (#6397), [#15192]
- Do not treat
mixedtype arguments as compatible both ways when both generic types are parameterized (#6398), [#15198] - Fix union of template array-key with false losing the template (#6376), [#13374], [#13192], [#10871], [#8268], [#7423], [#7279], [#7049], thanks @calebdw!
- Fix false positive comparing identical generic types below level 8 (#6392), [#13876], [#12984], [#12008], [#11041], [#10698], [#9377], [#9096], thanks @calebdw!
pcntl_exec()is not supported by blackfire (#6409), thanks @staabm!UsedNamesRule: reset imported names at everynamespacedeclaration instead of keying them by namespace name (#6413), [#15215]- Derive per-arm conditional expressions from overlapping ternary arm types (#6381), [#7905]
- Record needle-implies-true conditional expression for in_array() assignments (#6381), [#9752]
- Propagate conditional expressions through derived assignments (#6381), [#13054]
- Do not report
?? null/??= nullas unnecessary when evaluating the right side has side effects (#6418), [#15134], thanks @VincentLanglet and @staabm!
Performance 🏎️
- Reduce repeated work when matching ignored errors (#6374), thanks @zonuexe!
- Do not look up class reflection for properties without hooks (#6396)
- Share the directory walk between the analyse and the scan file finder (#6396)
- Read the exported PHPDoc scope off the AST instead of through FileTypeMapper (#6396)
- Memoize
ClassReflection::getName()(#6406) - Inline single-return getters when building the PHAR (#6406, #6412)
- Remove a union of values from a set in one pass (#6427)
- Key types by their value where
describe()was standing in for it (#6427) - Answer reflection cache misses without a failing
include()(#6430)
Function signature fixes 🤖
Locale::getPrimaryLanguage()can return empty string (#6400), thanks @BenMorel!