phpstan/phpstan
### [`v1.5.7`](https://togithub.com/phpstan/phpstan/releases/1.5.7)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.6...1.5.7)
# Bugfixes π
- Fix `array_merge` with numeric keys ([#1218](https://togithub.com/phpstan/phpstan-src/pull/1218)), thanks [@herndlm](https://togithub.com/herndlm)!
- Fix `ConstantArrayTypeBuilder` optional keys via `setOffsetValueType` ([#1225](https://togithub.com/phpstan/phpstan-src/pull/1225)), thanks [@herndlm](https://togithub.com/herndlm)!
- Fix `array_push` with an empty constant array ([#1210](https://togithub.com/phpstan/phpstan-src/pull/1210)), [#6974](https://togithub.com/phpstan/phpstan/issues/6974), thanks [@herndlm](https://togithub.com/herndlm)!
- Fix `array_push` / `array_unshift` with `ConstantArrayType` arguments ([#1232](https://togithub.com/phpstan/phpstan-src/pull/1232)), [#5783](https://togithub.com/phpstan/phpstan/issues/5783), thanks [@herndlm](https://togithub.com/herndlm)!
- Fix variadic parameters for generics (https://github.com/phpstan/phpstan-src/commit/f091c5629a48620972c657993032522def8a840d), [#7068](https://togithub.com/phpstan/phpstan/issues/7068)
- PHPStan Pro download API - pass current PHP version (https://github.com/phpstan/phpstan-src/commit/9044bfc33d254858ce44969848230477cb8f3ca7)
- PHPStan Pro - fix for potential issues on temp files (https://github.com/phpstan/phpstan-src/commit/2a145bad4e3d171e3a917e0f1f3e757bd5a6c523)
- Improve variadic parameter support in `array_merge` ([#1233](https://togithub.com/phpstan/phpstan-src/pull/1233)), thanks [@herndlm](https://togithub.com/herndlm)!
### [`v1.5.6`](https://togithub.com/phpstan/phpstan/releases/1.5.6)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.5...1.5.6)
This release enables to write forward-compatible custom rules with PHPStan 1.6.0+Bleeding Edge. Detailed instructions are here: https://phpstan.org/blog/preprocessing-ast-for-custom-rules
- Allow registering of custom rich parser node visitors (https://github.com/phpstan/phpstan-src/commit/b0dafcc4921bb6e3b0e5db5065b4989c3b350bab)
### [`v1.5.5`](https://togithub.com/phpstan/phpstan/releases/1.5.5)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.4...1.5.5)
# Improvements π§
- Remove unnecessary `ConstantArrayType::getKeyType()` ([#1173](https://togithub.com/phpstan/phpstan-src/pull/1173)), thanks [@herndlm](https://togithub.com/herndlm)!
- Improve `ConstantArrayType` union performance ([#1176](https://togithub.com/phpstan/phpstan-src/pull/1176)), thanks [@herndlm](https://togithub.com/herndlm)!
- Do not evaluate constructors as having side effects by default, Handle side effects of constructors in `new` ([#1205](https://togithub.com/phpstan/phpstan-src/pull/1205)), thanks [@VasekPurchart](https://togithub.com/VasekPurchart)!
# Bleeding edge πͺ
- Specify explicit mixed array type via `is_array` ([#1191](https://togithub.com/phpstan/phpstan-src/pull/1191)), thanks [@herndlm](https://togithub.com/herndlm)!
*If you want to see the shape of things to come and adopt bleeding edge features early, you can include this config file in your project's `phpstan.neon`:*
includes:
- vendor/phpstan/phpstan/conf/bleedingEdge.neon
*Of course, there are no backwards compatibility guarantees when you include this file. The behaviour and reported errors can change in minor versions with this file included. [Learn more](https://phpstan.org/blog/what-is-bleeding-edge)*
# Bugfixes π
- Fix `curl_getinfo($ch, CURLINFO_CONTENT_TYPE)` ([#1170](https://togithub.com/phpstan/phpstan-src/pull/1170)), [#6929](https://togithub.com/phpstan/phpstan/issues/6929), thanks [@oschwald](https://togithub.com/oschwald)!
- Fix return types for `bcdiv()`, `bcmod()`, `bcpowmod()` and `bcsqrt()` in PHP 8.0 and higher ([#1152](https://togithub.com/phpstan/phpstan-src/pull/1152)), [#5134](https://togithub.com/phpstan/phpstan/issues/5134), thanks [@W0rma](https://togithub.com/W0rma)!
- Add support for `int` and `bool` args for `strlen()` ([#1162](https://togithub.com/phpstan/phpstan-src/pull/1162)), thanks [@fluffycondor](https://togithub.com/fluffycondor)!
- Add support for `float` and `null` for `strlen()`, improve support for booleans ([#1199](https://togithub.com/phpstan/phpstan-src/pull/1199)), thanks [@fluffycondor](https://togithub.com/fluffycondor)!
- Feature/undefined expression allowed ([#1174](https://togithub.com/phpstan/phpstan-src/pull/1174)), [#6107](https://togithub.com/phpstan/phpstan/issues/6107), [#5971](https://togithub.com/phpstan/phpstan/issues/5971), [#5337](https://togithub.com/phpstan/phpstan/issues/5337), [#6899](https://togithub.com/phpstan/phpstan/issues/6899), thanks [@rajyan](https://togithub.com/rajyan)!
- Fix/coalesce simulate ternary ([#1193](https://togithub.com/phpstan/phpstan-src/pull/1193)), thanks [@rajyan](https://togithub.com/rajyan)!
- Support variadic parameter in `array_replace` ([#1209](https://togithub.com/phpstan/phpstan-src/pull/1209)), [#7020](https://togithub.com/phpstan/phpstan/issues/7020), thanks [@herndlm](https://togithub.com/herndlm)!
- ObjectType - fix imprecise cache key issue (https://github.com/phpstan/phpstan-src/commit/ee934468b707f46d0416bba7b89cc33d3a0d7cd7), [#6944](https://togithub.com/phpstan/phpstan/issues/6944)
- Fix int overflow internal error (https://github.com/phpstan/phpstan-src/commit/c5d0902d2b3fbf8f00913002f9ba72b6caa929a0), [#6979](https://togithub.com/phpstan/phpstan/issues/6979)
# Function signature fixes π€
- `DOMText::splitText()` may return false ([#1180](https://togithub.com/phpstan/phpstan-src/pull/1180)), thanks [@xPaw](https://togithub.com/xPaw)!
- `Collator` creation function/method can return null ([#1182](https://togithub.com/phpstan/phpstan-src/pull/1182)), thanks [@finwe](https://togithub.com/finwe)!
- Fix return signature of `SplObjectStorage` methods ([#1185](https://togithub.com/phpstan/phpstan-src/pull/1185)), thanks [@Furgas](https://togithub.com/Furgas)!
- Fix return signature of `SimpleXMLElement::getDocNamespaces` ([#1190](https://togithub.com/phpstan/phpstan-src/pull/1190)), thanks [@Furgas](https://togithub.com/Furgas)!
### [`v1.5.4`](https://togithub.com/phpstan/phpstan/releases/1.5.4)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.3...1.5.4)
# Bugfixes π
- Support named arguments when resolving template parameters ([#1151](https://togithub.com/phpstan/phpstan-src/pull/1151)), [#5262](https://togithub.com/phpstan/phpstan/issues/5262), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)!
- Various fixes for constant arrays ([#1154](https://togithub.com/phpstan/phpstan-src/pull/1154)), [#4308](https://togithub.com/phpstan/phpstan/issues/4308), [#6965](https://togithub.com/phpstan/phpstan/issues/6965), [#6961](https://togithub.com/phpstan/phpstan/issues/6961), [#6383](https://togithub.com/phpstan/phpstan/issues/6383), [#5933](https://togithub.com/phpstan/phpstan/issues/5933), [#5382](https://togithub.com/phpstan/phpstan/issues/5382), [#6379](https://togithub.com/phpstan/phpstan/issues/6379), [#3284](https://togithub.com/phpstan/phpstan/issues/3284)
- Fix for arrays not being accepted when having an accessory type (https://github.com/phpstan/phpstan-src/commit/843ebbb1d889ac4d9a152a52f1f1ee9690d2e721), [#6552](https://togithub.com/phpstan/phpstan/issues/6552)
- Avoid describing ConstantArrayType values twice ([#1168](https://togithub.com/phpstan/phpstan-src/pull/1168), [#1169](https://togithub.com/phpstan/phpstan-src/pull/1169)), thanks [@herndlm](https://togithub.com/herndlm)!
- Fix false positive `UnhandledMatchError` throw point ([#1165](https://togithub.com/phpstan/phpstan-src/pull/1165)), [#6910](https://togithub.com/phpstan/phpstan/issues/6910), thanks [@rajyan](https://togithub.com/rajyan)!
- Fix `in_array()` bug (https://github.com/phpstan/phpstan-src/commit/0ae28f761b2e0d473224aded78960d3d96b4e31e)
- Various optimization attempts (https://github.com/phpstan/phpstan-src/commit/91c7507787b4a9a63568562cda35644f139460c2, https://github.com/phpstan/phpstan-src/commit/5400b5858ef1750ede656dffc894acbbbc228e88, https://github.com/phpstan/phpstan-src/commit/c4c64fe6dae985d196aea92f3b7eca40e70c7ef4)
# Function signature fixes π€
- added `show_source()` signature, an alias of `highlight_file()` ([#1160](https://togithub.com/phpstan/phpstan-src/pull/1160)), thanks [@staabm](https://togithub.com/staabm)!
- more precise `getenv()` signature ([#1161](https://togithub.com/phpstan/phpstan-src/pull/1161)), thanks [@staabm](https://togithub.com/staabm)!
### [`v1.5.3`](https://togithub.com/phpstan/phpstan/releases/1.5.3)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.2...1.5.3)
# Improvements π§
- Update phpdoc-parser with multi-line union/intersection/conditional types support (https://github.com/phpstan/phpstan-src/commit/6fa7c9097d060e7eddd81adf7a6809eb94a221a6), [https://github.com/phpstan/phpdoc-parser/pull/114](https://togithub.com/phpstan/phpdoc-parser/pull/114), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)!
# Bugfixes π
- Mark `Memcached::HAVE_*` constants as dynamic ([#1142](https://togithub.com/phpstan/phpstan-src/pull/1142)), [#6263](https://togithub.com/phpstan/phpstan/issues/6263), thanks [@VasekPurchart](https://togithub.com/VasekPurchart)!
- Improve return types for `array_fill_keys` and `array_combine` ([#1139](https://togithub.com/phpstan/phpstan-src/pull/1139)), thanks [@canvural](https://togithub.com/canvural)!
- Guard `Equal` (`==`) expression specification with empty array on both sides ([#1143](https://togithub.com/phpstan/phpstan-src/pull/1143)), [#6940](https://togithub.com/phpstan/phpstan/issues/6940), thanks [@herndlm](https://togithub.com/herndlm)!
- Fix huge union types result from "+"-array-merge operation ([#1141](https://togithub.com/phpstan/phpstan-src/pull/1141)), [#6936](https://togithub.com/phpstan/phpstan/issues/6936), thanks [@staabm](https://togithub.com/staabm)!
- Improve return type of `array_fill_keys` for not constant arrays ([#1145](https://togithub.com/phpstan/phpstan-src/pull/1145)), thanks [@canvural](https://togithub.com/canvural)!
- Handle `false` return in `substr()` with PHP < 8 ([#1144](https://togithub.com/phpstan/phpstan-src/pull/1144)), [#6939](https://togithub.com/phpstan/phpstan/issues/6939), thanks [@herndlm](https://togithub.com/herndlm)!
- `array_merge` lost non-empty-string keys type ([#1135](https://togithub.com/phpstan/phpstan-src/pull/1135)), [#6927](https://togithub.com/phpstan/phpstan/issues/6927), [#5846](https://togithub.com/phpstan/phpstan/issues/5846), [#2567](https://togithub.com/phpstan/phpstan/issues/2567), thanks [@staabm](https://togithub.com/staabm)!
### [`v1.5.2`](https://togithub.com/phpstan/phpstan/releases/1.5.2)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.1...1.5.2)
# Bugfixes π
- Fix infinite recursion when caching types ([#1137](https://togithub.com/phpstan/phpstan-src/pull/1137)), [#6896](https://togithub.com/phpstan/phpstan/issues/6896), [#6911](https://togithub.com/phpstan/phpstan/issues/6911)
- Fixing bugs by removing caching π
- Timewise performance optimizations (https://github.com/phpstan/phpstan-src/commit/22f755c6a0bf5fd551634419680070fabf571a07)
- Offseting the removal of PHPDocs cache
### [`v1.5.1`](https://togithub.com/phpstan/phpstan/releases/1.5.1)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.0...1.5.1)
# Bugfixes π
- `is_subclass_of()`: do not infer anything when context is falsy ([#1124](https://togithub.com/phpstan/phpstan-src/pull/1124)), [#6891](https://togithub.com/phpstan/phpstan/issues/6891), thanks [@VincentLanglet](https://togithub.com/VincentLanglet)!
- Fix inferring template types on intersection types ([#1122](https://togithub.com/phpstan/phpstan-src/pull/1122)), [#6904](https://togithub.com/phpstan/phpstan/issues/6904), [#6917](https://togithub.com/phpstan/phpstan/issues/6917), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)!
# Function signature fixes π€
- more precise `getTrace()` return-type ([#1123](https://togithub.com/phpstan/phpstan-src/pull/1123)), thanks [@staabm](https://togithub.com/staabm)!
- Fix type definition of curl "certinfo" array ([#1118](https://togithub.com/phpstan/phpstan-src/pull/1118)), thanks [@cs278](https://togithub.com/cs278)!
- Update various DB functions for more specific row counts ([#1116](https://togithub.com/phpstan/phpstan-src/pull/1116)), thanks [@Seldaek](https://togithub.com/Seldaek)!
- small signature update ([#1126](https://togithub.com/phpstan/phpstan-src/pull/1126)), thanks [@staabm](https://togithub.com/staabm)!
# Internals π
- tests: use unique namespace to prevent collisions ([#1119](https://togithub.com/phpstan/phpstan-src/pull/1119)), thanks [@staabm](https://togithub.com/staabm)!
- ParaTest: leverage WrapperRunner for quicker tests ([#1115](https://togithub.com/phpstan/phpstan-src/pull/1115)), thanks [@Slamdunk](https://togithub.com/Slamdunk)!
- LevelsTestCase performance improvement - clear result cache just once (https://github.com/phpstan/phpstan-src/commit/0a3e1a79738070c95e3a69406b33d9277a49840c)
- Update phpdoc-parser to 1.4 (https://github.com/phpstan/phpstan-src/commit/6700eb69c1566190f3cad75fd5fa3edba64fce8e, https://github.com/phpstan/phpstan-src/commit/a3a7fad5b75dbf30e7685aac148e4b89b3e60509)
- Update BetterReflection to 5.3 ([#1132](https://togithub.com/phpstan/phpstan-src/pull/1132))
### [`v1.5.0`](https://togithub.com/phpstan/phpstan/releases/1.5.0)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.4.10...1.5.0)
**This release fixes 26 issues! π**
# Improvements π§
- Dropped support for PHP 7.1, PHPStan 1.5.0 runs on PHP 7.2-8.1. Users on PHP 7.1 accounted only for 0.8 % of installatoins.
- Allow null as a return value when resolving return types ([#1061](https://togithub.com/phpstan/phpstan-src/pull/1061)), [#5855](https://togithub.com/phpstan/phpstan/issues/5855), thanks [@matthiasnoback](https://togithub.com/matthiasnoback)!
- Output elapsed time per file in debug mode ([#1062](https://togithub.com/phpstan/phpstan-src/pull/1062)), [#5294](https://togithub.com/phpstan/phpstan/issues/5294), thanks [@janedbal](https://togithub.com/janedbal)!
- A bit more precise concatenation of unions of literal strings ([#937](https://togithub.com/phpstan/phpstan-src/pull/937)), [#6439](https://togithub.com/phpstan/phpstan/issues/6439), thanks [@staabm](https://togithub.com/staabm)!
- `OptimizedDirectorySourceLocator::locateIdentifiersByType()` returns all located classes or functions ([#1080](https://togithub.com/phpstan/phpstan-src/pull/1080)), thanks [@tomasfejfar](https://togithub.com/tomasfejfar)!
- Backward compatibility promise: ReflectionProvider cannot be extended/implemented by 3rd party code (https://github.com/phpstan/phpstan-src/commit/e60d6d6e9637db8a00bfd11cf446fabb3d545aa2)
- implement `ArraySearchFunctionTypeSpecifyingExtension` ([#1086](https://togithub.com/phpstan/phpstan-src/pull/1086)), [#6863](https://togithub.com/phpstan/phpstan/issues/6863), thanks [@staabm](https://togithub.com/staabm)!
- added `ArrayReplaceFunctionReturnTypeExtension` ([#1087](https://togithub.com/phpstan/phpstan-src/pull/1087)), [#5327](https://togithub.com/phpstan/phpstan/issues/5327), thanks [@staabm](https://togithub.com/staabm)!
- Dynamic return type extension for `curl_getinfo` ([#1072](https://togithub.com/phpstan/phpstan-src/pull/1072)), thanks [@PrinsFrank](https://togithub.com/PrinsFrank)!
- Support intersection types in template bounds ([#1101](https://togithub.com/phpstan/phpstan-src/pull/1101)), [#6649](https://togithub.com/phpstan/phpstan/issues/6649), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)!
- Support `value-of` ([#1082](https://togithub.com/phpstan/phpstan-src/pull/1082)), [#6775](https://togithub.com/phpstan/phpstan/issues/6775), thanks [@staabm](https://togithub.com/staabm)!
# Bleeding edge πͺ
- Report useless `array_filter()` calls ([#1077](https://togithub.com/phpstan/phpstan-src/pull/1077)), [#6840](https://togithub.com/phpstan/phpstan/issues/6840), thanks [@leongersen](https://togithub.com/leongersen)!
*If you want to see the shape of things to come and adopt bleeding edge features early, you can include this config file in your project's `phpstan.neon`:*
includes:
- vendor/phpstan/phpstan/conf/bleedingEdge.neon
*Of course, there are no backwards compatibility guarantees when you include this file. The behaviour and reported errors can change in minor versions with this file included. [Learn more](https://phpstan.org/blog/what-is-bleeding-edge)*
# Bugfixes π
- fix handling of `JSON_THROW_ON_ERROR` with optional bitwise flags ([#1025](https://togithub.com/phpstan/phpstan-src/pull/1025)), [#6654](https://togithub.com/phpstan/phpstan/issues/6654), thanks [@staabm](https://togithub.com/staabm)!
- Keep non nullability if right expr is `NeverType` ([#1063](https://togithub.com/phpstan/phpstan-src/pull/1063)), [#5351](https://togithub.com/phpstan/phpstan/issues/5351), thanks [@rajyan](https://togithub.com/rajyan)!
- Support more dynamic `$flags` arg in `preg_split()` ([#1081](https://togithub.com/phpstan/phpstan-src/pull/1081)), thanks [@staabm](https://togithub.com/staabm)!
- Fix `array_keys` and `array_values` with accessory types ([#1084](https://togithub.com/phpstan/phpstan-src/pull/1084)), [#6859](https://togithub.com/phpstan/phpstan/issues/6859), thanks [@staabm](https://togithub.com/staabm)!
- Fix memory error when trying to represent big literal string types ([#1088](https://togithub.com/phpstan/phpstan-src/pull/1088)), [#6866](https://togithub.com/phpstan/phpstan/issues/6866), thanks [@mathroc](https://togithub.com/mathroc)!
- Add throw point for `UnhandledMatchError` ([#1056](https://togithub.com/phpstan/phpstan-src/pull/1056)), [#6115](https://togithub.com/phpstan/phpstan/issues/6115), thanks [@rajyan](https://togithub.com/rajyan)!
- Do not report unhandled match expression value if `@throws` tag is present with `UnhandledMatchError` ([#1103](https://togithub.com/phpstan/phpstan-src/pull/1103)), thanks [@rajyan](https://togithub.com/rajyan)!
- Retain accessory string types in generics ([#1096](https://togithub.com/phpstan/phpstan-src/pull/1096)), [#6301](https://togithub.com/phpstan/phpstan/issues/6301), [#3951](https://togithub.com/phpstan/phpstan/issues/3951), [#6845](https://togithub.com/phpstan/phpstan/issues/6845), [#5336](https://togithub.com/phpstan/phpstan/issues/5336), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)!
- Simplify `FloatType::accepts` handling of `CompoundType`s ([#1097](https://togithub.com/phpstan/phpstan-src/pull/1097)), [#6872](https://togithub.com/phpstan/phpstan/issues/6872), thanks [@herndlm](https://togithub.com/herndlm)!
- Early termination for NeverType match expression ([#1078](https://togithub.com/phpstan/phpstan-src/pull/1078)), [#6257](https://togithub.com/phpstan/phpstan/issues/6257), [#6251](https://togithub.com/phpstan/phpstan/issues/6251), thanks [@rajyan](https://togithub.com/rajyan)!
- ObjectType - different priority in iterable key and iterable value (https://github.com/phpstan/phpstan-src/commit/125619231fc24bf8bb99e9e1586a49d7199380b2), [#6494](https://togithub.com/phpstan/phpstan/issues/6494)
- Support `enum_exists` in ClassExistsFunctionTypeSpecifyingExtension ([#1109](https://togithub.com/phpstan/phpstan-src/pull/1109)), thanks [@staabm](https://togithub.com/staabm)!
- Fix/issue 6870 expr early termination for `BinaryOp` ([#1105](https://togithub.com/phpstan/phpstan-src/pull/1105)), [#6870](https://togithub.com/phpstan/phpstan/issues/6870), [#6890](https://togithub.com/phpstan/phpstan/issues/6890), thanks [@rajyan](https://togithub.com/rajyan)!
# Function signature fixes π€
- Fix DOMNodeList stub and add DOMXPath::query() ([#1052](https://togithub.com/phpstan/phpstan-src/pull/1052)), [#6748](https://togithub.com/phpstan/phpstan/issues/6748), thanks [@mkrauss](https://togithub.com/mkrauss)!
- Change `ReflectionMethod::$class` type to `class-string` ([#1107](https://togithub.com/phpstan/phpstan-src/pull/1107)), [#6889](https://togithub.com/phpstan/phpstan/issues/6889), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)!
- More precise function signatures ([#1110](https://togithub.com/phpstan/phpstan-src/pull/1110)), thanks [@staabm](https://togithub.com/staabm)!
- Update `context` parameter signature in `fopen()` ([#1113](https://togithub.com/phpstan/phpstan-src/pull/1113)), thanks [@bytestream](https://togithub.com/bytestream)!
- clear stat-cache also on `is_writeable()` calls ([#1112](https://togithub.com/phpstan/phpstan-src/pull/1112)), thanks [@staabm](https://togithub.com/staabm)!
# Internals π
- PHPStan now utilizes version-based naming of Git branches (`1.5.x`) instead of `master`
- CI pipeline is faster thanks to several improvements:
- Support for PHP 7.1 was dropped
- Reproducible `phpstan.phar` checksum is computed and compared when running integration tests from `phpstan/phpstan` on pull requests in `phpstan-src`. The integration tests run only when the checksum was changed. This means that for example if only unit tests in phpstan-src were changed, PHAR didn't change and those integration tests from `phpstan/phpstan` don't have to run.
- Rector downgrade cache was implemented. When transforming sources from PHP 8.0 to various lower PHP versions, cache is utilized instead of making Rector do the hard work each time.
### [`v1.4.10`](https://togithub.com/phpstan/phpstan/releases/1.4.10)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.4.9...1.4.10)
- Fix the difference between `?T` and `T|null` (https://github.com/phpstan/phpstan-src/commit/28776ffd4604e92761e09413cfc9c096d2547ad8), [#6790](https://togithub.com/phpstan/phpstan/issues/6790)
- Check property assign `TypeError` throw point by native type ([#1065](https://togithub.com/phpstan/phpstan-src/pull/1065)), [#6791](https://togithub.com/phpstan/phpstan/issues/6791), [#6786](https://togithub.com/phpstan/phpstan/issues/6786), thanks [@rajyan](https://togithub.com/rajyan)!
### [`v1.4.9`](https://togithub.com/phpstan/phpstan/releases/1.4.9)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.4.8...1.4.9)
# Improvements π§
- `Identical` (`===` and `!==`) and `Equal` (`==` and `!=`) with the same variables resolve to `ConstantBooleanType` (https://github.com/phpstan/phpstan-src/commit/98c4d84ec983fb36992119d4c393d7192a2a99b6)
- Scalars of the same type on both of `Equal` (`==` and `!=`) are delegated to `Identical` (`===` and `!==`) (https://github.com/phpstan/phpstan-src/commit/316f269d6e81fcfa435f74cb1155076e349f053f)
# Bugfixes π
- Fix trait detection recursion ([#1050](https://togithub.com/phpstan/phpstan-src/pull/1050)), [#6740](https://togithub.com/phpstan/phpstan/issues/6740), thanks [@herndlm](https://togithub.com/herndlm)!
- Do not add `null` to a template type for a default parameter value `null` (https://github.com/phpstan/phpstan-src/commit/7a66cb6eda85703811c7dce472355e036d70c144), [#6584](https://togithub.com/phpstan/phpstan/issues/6584)
- Fix nullable closure parameter type (https://github.com/phpstan/phpstan-src/commit/c05ba984a08d1fa50e0edf63e99a9a893e78e821), [#6701](https://togithub.com/phpstan/phpstan/issues/6701)
- TemplateType - fix description for subtracted mixed bound (https://github.com/phpstan/phpstan-src/commit/6525d6805b1beece69ec97802bdf16dd8545cfdf)
- Fix dead catch when iterating objects ([#1051](https://togithub.com/phpstan/phpstan-src/pull/1051)), [#5903](https://togithub.com/phpstan/phpstan/issues/5903), thanks [@rajyan](https://togithub.com/rajyan)!
- Fix false positive dead catch on property assignment ([#1047](https://togithub.com/phpstan/phpstan-src/pull/1047)), [#6256](https://togithub.com/phpstan/phpstan/issues/6256), thanks [@rajyan](https://togithub.com/rajyan)!
- Fix template type subtraction and union (https://github.com/phpstan/phpstan-src/commit/51e2df38ee7fbda5416e1c5c1091dacf8618f3e1), [#6591](https://togithub.com/phpstan/phpstan/issues/6591)
- Simulate `offsetSet` to get throw points for ArrayAccess assignment ([#1054](https://togithub.com/phpstan/phpstan-src/pull/1054)), [#4852](https://togithub.com/phpstan/phpstan/issues/4852), thanks [@rajyan](https://togithub.com/rajyan)!
- Make return type extension for `array_column()` aware of PHP version ([#1053](https://togithub.com/phpstan/phpstan-src/pull/1053)), thanks [@jlherren](https://togithub.com/jlherren)!
- Fix Unused private constant with an indirect access ([#1059](https://togithub.com/phpstan/phpstan-src/pull/1059)), [#6758](https://togithub.com/phpstan/phpstan/issues/6758), thanks [@rajyan](https://togithub.com/rajyan)!
- Fix `Equal` (`==` and `!=`) handling in TypeSpecifier (https://github.com/phpstan/phpstan-src/commit/10b295f3cde7d91cc2b2784fc012910be6a06fb8)
- Fix more TypeSpecifier issues regarding `Identical` (`===` and `!==`) ([#1058](https://togithub.com/phpstan/phpstan-src/pull/1058))
### [`v1.4.8`](https://togithub.com/phpstan/phpstan/releases/1.4.8)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.4.7...1.4.8)
# Improvements π§
- Validate `ignoreErrors` regexes during DIC compilation (save time in each run) (https://github.com/phpstan/phpstan-src/commit/692158c194eff722167f5316d31369a188a88a72), [#6693](https://togithub.com/phpstan/phpstan/issues/6693)
- Validate `parametersSchema` only during DIC compilation (https://github.com/phpstan/phpstan-src/commit/50f25e95ad2f99d9fb73e512ac9b54599653305b)
- Retain left and right types in `==` and `===` expression ([#1046](https://togithub.com/phpstan/phpstan-src/pull/1046)), thanks [@herndlm](https://togithub.com/herndlm)!
- Add support for integer ranges in `strtotime()` with constant strings ([#1045](https://togithub.com/phpstan/phpstan-src/pull/1045)), thanks [@Seldaek](https://togithub.com/Seldaek)!
# Bugfixes π
- Fix `is_subclass_of` with same class ([#1044](https://togithub.com/phpstan/phpstan-src/pull/1044)), [#6305](https://togithub.com/phpstan/phpstan/issues/6305), thanks [@herndlm](https://togithub.com/herndlm)!
- Fix Incorrectly nested style tag found for narrow terminals (https://github.com/phpstan/phpstan-src/commit/d921d067702acb1cc0451753dcdf3be142b29aed), [#6724](https://togithub.com/phpstan/phpstan/issues/6724), [#6727](https://togithub.com/phpstan/phpstan/issues/6727)
- Empty array infers key and value type as never (https://github.com/phpstan/phpstan-src/commit/c2b9e713daa09db18111d28ba5c8cd79beeaeec5), [#3400](https://togithub.com/phpstan/phpstan/issues/3400), [#6353](https://togithub.com/phpstan/phpstan/issues/6353), [#5757](https://togithub.com/phpstan/phpstan/issues/5757), [#5065](https://togithub.com/phpstan/phpstan/issues/5065)
- `ArrayType::traverse()` - create empty `ConstantArrayType` in case of `never` (https://github.com/phpstan/phpstan-src/commit/8c1dfc1afb3f381c8e50befe38e8abc581c67db2)
### [`v1.4.7`](https://togithub.com/phpstan/phpstan/releases/1.4.7)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.4.6...1.4.7)
**This release fixes 43 issues! π**
# Improvements π§
- Run the parallel worker even for a low number of files ([#686](https://togithub.com/phpstan/phpstan-src/commit/21590573d4cf113d13b8ea0518ebd06eeee9a98e)), [#6606](https://togithub.com/phpstan/phpstan/issues/6606)
- Autodiscover `phpstan.dist.neon` as a config file ([#1006](https://togithub.com/phpstan/phpstan-src/pull/1006)), [#6561](https://togithub.com/phpstan/phpstan/issues/6561), thanks [@b1rdex](https://togithub.com/b1rdex)!
- Make editor links clickable for terminals supporting hrefs ([#1013](https://togithub.com/phpstan/phpstan-src/pull/1013), https://github.com/phpstan/phpstan-src/commit/bbf14bf635e91aad4be81ad6eacc8b18fb3b31ed), thanks [@Seldaek](https://togithub.com/Seldaek)!
- Table format error output - improve table wrapping (https://github.com/phpstan/phpstan-src/commit/bc481b74fb54f494d616e5f7bb04053b7fffc28f)
- Implemented ConstantStringType inference for `str_repeat` ([#1030](https://togithub.com/phpstan/phpstan-src/pull/1030)), [#6679](https://togithub.com/phpstan/phpstan/issues/6679), thanks [@staabm](https://togithub.com/staabm)!
- Deprecate `TypeUtils::generalizeType()` (https://github.com/phpstan/phpstan-src/commit/267457712854e8ed1de9c6b99e918e2d9d1219d3)
- Date format return type extensions (https://github.com/phpstan/phpstan-src/commit/b49df58105e5300d4a2d7b0ff44a5a6f5806f240), [#6550](https://togithub.com/phpstan/phpstan/issues/6550)
- Infer explicit mixed when instantiating generic class with unknown template types ([bleeding edge](https://phpstan.org/blog/what-is-bleeding-edge)) (https://github.com/phpstan/phpstan-src/commit/089d4c6fb6eb709c44123548d33990113d174b86), [#6398](https://togithub.com/phpstan/phpstan/issues/6398)
# Bugfixes π
- Fix incorrect array `sizeof()` when using `unset()` ([#971](https://togithub.com/phpstan/phpstan-src/pull/971)), [#6488](https://togithub.com/phpstan/phpstan/issues/6488), thanks [@staabm](https://togithub.com/staabm)!
- Split `TemplateType::isSubTypeOf()` and `TemplateType::isAcceptedBy()` ([#1001](https://togithub.com/phpstan/phpstan-src/pull/1001)), [#6589](https://togithub.com/phpstan/phpstan/issues/6589), thanks [@arnaud-lb](https://togithub.com/arnaud-lb)!
- Use a BenovolentUnionType for properties in SimpleXMLElement ([#76](https://togithub.com/phpstan/phpstan-src/pull/76)), [#2784](https://togithub.com/phpstan/phpstan/issues/2784), [#6020](https://togithub.com/phpstan/phpstan/issues/6020), thanks [@orklah](https://togithub.com/orklah)!
- Binary operations on `non-empty-string` and `string` should error ([#1011](https://togithub.com/phpstan/phpstan-src/pull/1010)), [#6624](https://togithub.com/phpstan/phpstan/issues/6624), thanks [@staabm](https://togithub.com/staabm)!
- No longer verify types when `TypeSpecifyingExtension` uses `$overwrite=true` ([#1011](https://togithub.com/phpstan/phpstan-src/pull/1011)), [#6620](https://togithub.com/phpstan/phpstan/issues/6620), thanks [@staabm](https://togithub.com/staabm)!
- Normalize specified types before intersection ([#1016](https://togithub.com/phpstan/phpstan-src/pull/1016)), [#6329](https://togithub.com/phpstan/phpstan/issues/6329), thanks [@herndlm](https://togithub.com/herndlm)!
- Improve intersect and union of SubtractableTypes ([#1028](https://togithub.com/phpstan/phpstan-src/pull/1028)), [#6672](https://togithub.com/phpstan/phpstan/issues/6672), thanks [@herndlm](https://togithub.com/herndlm)!
- Ignore `@template` above a property (https://github.com/phpstan/phpstan-src/commit/53563e9429f9559120aa8e043d9283c6b4c2d0a9)
- Add missing `SpecifiedTypes` for `count()` and `strlen()` in `===` expressions ([#1021](https://togithub.com/phpstan/phpstan-src/pull/1021)), thanks [@herndlm](https://togithub.com/herndlm)!
- Detect closure parameter types when passing closure in a union ([#1019](https://togithub.com/phpstan/phpstan-src/pull/1019)), [#5675](https://togithub.com/phpstan/phpstan/issues/5675), [#6629](https://togithub.com/phpstan/phpstan/issues/6629), thanks [@axlon](https://togithub.com/axlon)!
- Fix another BooleanOr issue (https://github.com/phpstan/phpstan-src/commit/cc6655f9311a738bc2dec6bad2c6e6b6b8173c81), [#6696](https://togithub.com/phpstan/phpstan/issues/6696), [#6112](https://togithub.com/phpstan/phpstan/issues/6112), [#5749](https://togithub.com/phpstan/phpstan/issues/5749)
- Fix anonymous class reflection error (https://github.com/phpstan/phpstan-src/commit/0e5d58604e4cfdc5f9c2742736a05c1434de8821), [#6681](https://togithub.com/phpstan/phpstan/issues/6681)
- OptimizedDirectorySourceLocator - fix bug with uppercase Enum keyword (https://github.com/phpstan/phpstan-src/commit/7110a088ffb28e368b4ba23f73c23b936e4ff05c)
- Template tag without bound is explicit mixed (https://github.com/phpstan/phpstan-src/commit/0808a89469a0d28bebd0b8d7b14af1639e441215)
- Fix isSmallerThan etc. in BenevolentUnionType (https://github.com/phpstan/phpstan-src/commit/dd5633f1835d58f67edb95858185b7791a13220c), [#5969](https://togithub.com/phpstan/phpstan/issues/5969), [#5295](https://togithub.com/phpstan/phpstan/issues/5295)
- Do not generalize `class-string` during template type inference ([#1038](https://togithub.com/phpstan/phpstan-src/pull/1038)), [#6505](https://togithub.com/phpstan/phpstan/issues/6505), [#6699](https://togithub.com/phpstan/phpstan/issues/6699), thanks [@arnaud-lb](https://togithub.com/arnaud-lb)!
- Support for `class-string` `$class` parameter in `is_subclass_of()` ([#1039](https://togithub.com/phpstan/phpstan-src/pull/1039)), [#6698](https://togithub.com/phpstan/phpstan/issues/6698), [#5369](https://togithub.com/phpstan/phpstan/issues/5369), thanks [@arnaud-lb](https://togithub.com/arnaud-lb)!
- Fix generalization of `EnumCaseObjectType` (https://github.com/phpstan/phpstan-src/commit/9e428966d8f985db3199a234406c6799abd18617), [#6695](https://togithub.com/phpstan/phpstan/issues/6695), [#6433](https://togithub.com/phpstan/phpstan/issues/6433)
- Duplicate and adapt solution from `is_subclass_of()` for `is_a()` ([#1040](https://togithub.com/phpstan/phpstan-src/pull/1040)), [#6704](https://togithub.com/phpstan/phpstan/issues/6704), thanks [@herndlm](https://togithub.com/herndlm)!
- ImplodeFunctionReturnTypeExtension - fix handling optional keys in ConstantArrayType (https://github.com/phpstan/phpstan-src/commit/7f643c5866c3aab51a93e971ab0a7cf471111edf), [#6715](https://togithub.com/phpstan/phpstan/issues/6715)
- Improve `ArrayType::castToArrayKeyType()` for booleans ([#1033](https://togithub.com/phpstan/phpstan-src/pull/1033)), thanks [@jlherren](https://togithub.com/jlherren)!
- Fix `ArrayColumnFunctionReturnTypeExtension` producing array key types ([#1033](https://togithub.com/phpstan/phpstan-src/pull/1033)), [#6682](https://togithub.com/phpstan/phpstan/issues/6682), thanks [@jlherren](https://togithub.com/jlherren)!
- Fix `in_array()` for arrays with union value type (https://github.com/phpstan/phpstan-src/commit/4321374cadc2d0a2a738fa322888e15d61116d56), [#6705](https://togithub.com/phpstan/phpstan/issues/6705), [#5668](https://togithub.com/phpstan/phpstan/issues/5668), [#5759](https://togithub.com/phpstan/phpstan/issues/5759), [#3314](https://togithub.com/phpstan/phpstan/issues/3314), [#5496](https://togithub.com/phpstan/phpstan/issues/5496), [#4666](https://togithub.com/phpstan/phpstan/issues/4666), [#3892](https://togithub.com/phpstan/phpstan/issues/3892), [#5354](https://togithub.com/phpstan/phpstan/issues/5354), [#2870](https://togithub.com/phpstan/phpstan/issues/2870)
# Function signature fixes π€
- Add FilterIterator stub (https://github.com/phpstan/phpstan-src/commit/c5f4c3b1693b8e0b3bcab5705d4f301999c523b3)
- Add CallbackFilterIterator stub (https://github.com/phpstan/phpstan-src/commit/868720e093f4246748846f7629dc57391d7daaff)
- Add RecursiveCallbackFilterIterator stub (https://github.com/phpstan/phpstan-src/commit/86a63ff1f07352fffe84b2ad0468d5d14a0fc2d3)
- Correct the case for various class names. ([#1007](https://togithub.com/phpstan/phpstan-src/pull/1007)), thanks [@johnbillion](https://togithub.com/johnbillion)!
- Update the signature for `set_error_handler()`. ([#1008](https://togithub.com/phpstan/phpstan-src/pull/1008)), [#6619](https://togithub.com/phpstan/phpstan/issues/6619), thanks [@johnbillion](https://togithub.com/johnbillion)!
- `PDOStatement::fetchAll` no longer returns false on PHP8 ([#1014](https://togithub.com/phpstan/phpstan-src/pull/1014)), thanks [@xPaw](https://togithub.com/xPaw)!
- `mb_*` fatal errors on php8 with invalid encoding ([#969](https://togithub.com/phpstan/phpstan-src/pull/969)), thanks [@staabm](https://togithub.com/staabm)!
- Allow 1st argument `$read` of `stream_select` to be nullable ([#1031](https://togithub.com/phpstan/phpstan-src/pull/1031)), thanks [@niconoe-](https://togithub.com/niconoe-)!
- Fix `PDOException::getCode()` return type ([#1018](https://togithub.com/phpstan/phpstan-src/pull/1018)), [#6651](https://togithub.com/phpstan/phpstan/issues/6651), thanks [@VincentLanglet](https://togithub.com/VincentLanglet)!
- Countable stub with `0|positive-int` ([bleeding edge](https://phpstan.org/blog/what-is-bleeding-edge)) ([#1027](https://togithub.com/phpstan/phpstan-src/pull/1027)), thanks [@staabm](https://togithub.com/staabm)!
- Fix `substr()` return type on PHP < 8 - use benevolent union type ([#1036](https://togithub.com/phpstan/phpstan-src/pull/1036)), thanks [@Seldaek](https://togithub.com/Seldaek)!
- Fixed error return signatures for `\SplFileInfo` ([#1034](https://togithub.com/phpstan/phpstan-src/pull/1034)), [#6680](https://togithub.com/phpstan/phpstan/issues/6680), thanks [@siganushka](https://togithub.com/siganushka)!
- Fix `setFetchMode` signature with `fetch_class` ([#1043](https://togithub.com/phpstan/phpstan-src/pull/1043)), thanks [@Seldaek](https://togithub.com/Seldaek)!
- `preg_filter` return type extension ([#1024](https://togithub.com/phpstan/phpstan-src/pull/1024)), [#6664](https://togithub.com/phpstan/phpstan/issues/6664), thanks [@staabm](https://togithub.com/staabm)!
- more precise `preg_match_all` return type on PHP 8 ([#1023](https://togithub.com/phpstan/phpstan-src/pull/1023)), thanks [@staabm](https://togithub.com/staabm)!
### [`v1.4.6`](https://togithub.com/phpstan/phpstan/releases/1.4.6)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.4.5...1.4.6)
# Improvements π§
- Implemented constant type inference for `implode()` function ([#991](https://togithub.com/phpstan/phpstan-src/pull/991)), thanks [@staabm](https://togithub.com/staabm)!
# Bugfixes π
- Fix interaction between template type and union type ([#992](https://togithub.com/phpstan/phpstan-src/pull/992)), [#5591](https://togithub.com/phpstan/phpstan/issues/5591), thanks [@arnaud-lb](https://togithub.com/arnaud-lb)!
- Delegate most of `TypeCombinator::remove()` to `Type::tryRemove()` ([#994](https://togithub.com/phpstan/phpstan-src/pull/994)), [#6438](https://togithub.com/phpstan/phpstan/issues/6438), thanks [@arnaud-lb](https://togithub.com/arnaud-lb)!
- TemplateType should accept a TemplateType derived from itself ([#999](https://togithub.com/phpstan/phpstan-src/pull/999)), [#5844](https://togithub.com/phpstan/phpstan/issues/5844), [#5706](https://togithub.com/phpstan/phpstan/issues/5706), thanks [@arnaud-lb](https://togithub.com/arnaud-lb)!
- Fixed intersecting and removal from TemplateUnionType (https://github.com/phpstan/phpstan-src/commit/0d288353ca782ef79e362657c2581abf4246a2f8), [#6566](https://togithub.com/phpstan/phpstan/issues/6566)
- Fixed type seen by IterableInForeachRule with inline `@var` right above `foreach` (https://github.com/phpstan/phpstan-src/commit/b6bbbaf6b01cbd43ae2800bbd00fe0ddbcb2e0d9), [#6564](https://togithub.com/phpstan/phpstan/issues/6564)
- modulo 1 is always zero ([#973](https://togithub.com/phpstan/phpstan-src/pull/973)), thanks [@staabm](https://togithub.com/staabm)!
- multiply by zero is always zero ([#974](https://togithub.com/phpstan/phpstan-src/pull/974)), thanks [@staabm](https://togithub.com/staabm)!
- Fixed discovering backed enum without space around `:` (https://github.com/phpstan/phpstan-src/commit/5162bcfea5456eb827035cd249c5ace55057237b), [https://github.com/composer/composer/issues/10498](https://togithub.com/composer/composer/issues/10498)
# Function signature fixes π€
- Function `md5()` always return `non-empty-string` ([#987](https://togithub.com/phpstan/phpstan-src/pull/987)), thanks [@janbarasek](https://togithub.com/janbarasek)!
- Correct the case for parameters that accept an instance of `Iterator`. ([#988](https://togithub.com/phpstan/phpstan-src/pull/988)), thanks [@johnbillion](https://togithub.com/johnbillion)!
- Fix the return types of `round()`/`ceil()`/`floor()` ([#729](https://togithub.com/phpstan/phpstan-src/pull/729)), thanks [@johnbillion](https://togithub.com/johnbillion)!
- Correct the return type of `SplFileObject::fstat()` ([#996](https://togithub.com/phpstan/phpstan-src/pull/996)), thanks [@johnbillion](https://togithub.com/johnbillion)!
- Improve the return type of functions that return an indexed array of strings ([#997](https://togithub.com/phpstan/phpstan-src/pull/997)), thanks [@johnbillion](https://togithub.com/johnbillion)!
### [`v1.4.5`](https://togithub.com/phpstan/phpstan/releases/1.4.5)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.4.4...1.4.5)
# Improvements π§
- AnalyseApplication: Do not re-analyse stubs on every run ([#730](https://togithub.com/phpstan/phpstan-src/pull/730)), [#5826](https://togithub.com/phpstan/phpstan/issues/5826), thanks [@dktapps](https://togithub.com/dktapps)!
- Add shorthand for `--generate-baseline` (`-b`) ([#980](https://togithub.com/phpstan/phpstan-src/pull/980)), thanks [@Seldaek](https://togithub.com/Seldaek)!
- Support narrowing down `array_filter()` return type via string callable ([#938](https://togithub.com/phpstan/phpstan-src/pull/938)), [#6417](https://togithub.com/phpstan/phpstan/issues/6417), thanks [@herndlm](https://togithub.com/herndlm)!
- Loop optimization ([#757](https://togithub.com/phpstan/phpstan-src/pull/757)), thanks [@ging-dev](https://togithub.com/ging-dev)!
# Bugfixes π
- Fixed level 9 issues (https://github.com/phpstan/phpstan-src/commit/9f12f0fb4877b28cdad42644d927f579c42db22d), [#6423](https://togithub.com/phpstan/phpstan/issues/6423), [#6464](https://togithub.com/phpstan/phpstan/issues/6464), [#6236](https://togithub.com/phpstan/phpstan/issues/6236), [#6418](https://togithub.com/phpstan/phpstan/issues/6418), [#6118](https://togithub.com/phpstan/phpstan/issues/6118), [#6081](https://togithub.com/phpstan/phpstan/issues/6081), [#6053](https://togithub.com/phpstan/phpstan/issues/6053), [#6055](https://togithub.com/phpstan/phpstan/issues/6055), [#5860](https://togithub.com/phpstan/phpstan/issues/5860), [#6230](https://togithub.com/phpstan/phpstan/issues/6230)
- Cast PHPDoc array key type with array key casting rules (https://github.com/phpstan/phpstan-src/commit/5d17b847d9f60a0fba21d76d813a612c042fdb1c), [#6117](https://togithub.com/phpstan/phpstan/issues/6117)
- Support closure bind with class-string ([#706](https://togithub.com/phpstan/phpstan-src/pull/706)), [#4949](https://togithub.com/phpstan/phpstan/issues/4949), thanks [@mvorisek](https://togithub.com/mvorisek)!
- Fix `NeverType::toBoolean()` (https://github.com/phpstan/phpstan-src/commit/fe3a3419d5d8d2b276456971afc3e1804ab1c759), [#6258](https://togithub.com/phpstan/phpstan/issues/6258)
- Fix `DatePeriod` constructor extension in subclasses (https://github.com/phpstan/phpstan-src/commit/0c82b3a2675f636db920a0a3e077a45a87200766), [#6500](https://togithub.com/phpstan/phpstan/issues/6500)
- Forget remembered specific type when entering arrow function with same-named parameter (https://github.com/phpstan/phpstan-src/commit/af38f03b41d002bd01afa989921acd9f1114fc0e), [#6473](https://togithub.com/phpstan/phpstan/issues/6473)
- Fix segfault (https://github.com/phpstan/phpstan-src/commit/d101764ff94a5838930a11fdac7ca9156ded7dc4), [#6501](https://togithub.com/phpstan/phpstan/issues/6501)
# Function signature fixes π€
- More precise `array_chunk` signature ([#709](https://togithub.com/phpstan/phpstan-src/pull/709)), thanks [@staabm](https://togithub.com/staabm)!
- Narrow the type for the `preg_replace_callback()` callable. ([#758](https://togithub.com/phpstan/phpstan-src/pull/758)), thanks [@johnbillion](https://togithub.com/johnbillion)!
- Update return types for hash functions ([#822](https://togithub.com/phpstan/phpstan-src/pull/822)), thanks [@jlherren](https://togithub.com/jlherren)!
- Fix type for `array_splice()` argument `$replacement` ([#901](https://togithub.com/phpstan/phpstan-src/pull/901)), [#6288](https://togithub.com/phpstan/phpstan/issues/6288), thanks [@spawnia](https://togithub.com/spawnia)!
- `stream_bucket_new` returns an object ([#968](https://togithub.com/phpstan/phpstan-src/pull/968)), thanks [@mind-bending-forks](https://togithub.com/mind-bending-forks)!
- More precise signatures for `mb_*` functions ([#717](https://togithub.com/phpstan/phpstan-src/pull/717)), thanks [@staabm](https://togithub.com/staabm)!
- Fix `array_column()` with `null` as `$column_key` ([#970](https://togithub.com/phpstan/phpstan-src/pull/970)), thanks [@jlherren](https://togithub.com/jlherren)!
### [`v1.4.4`](https://togithub.com/phpstan/phpstan/releases/1.4.4)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.4.3...1.4.4)
# Improvements π§
- Return type extension for `array_column()` ([#948](https://togithub.com/phpstan/phpstan-src/pull/948)), thanks [@jlherren](https://togithub.com/jlherren)!
- Generic stub for `DatePeriod` + constructor dynamic return type extension ([#958](https://togithub.com/phpstan/phpstan-src/pull/958)), [#5953](https://togithub.com/phpstan/phpstan/issues/5953), thanks [@Alban-io](https://togithub.com/Alban-io)!
- Resolve remaining predefined constants ([#693](https://togithub.com/phpstan/phpstan-src/pull/693)), thanks [@herndlm](https://togithub.com/herndlm)!
# Bugfixes π
- Support all `array_filter()` flags for narrowing down types ([#941](https://togithub.com/phpstan/phpstan-src/pull/941)), thanks [@herndlm](https://togithub.com/herndlm)!
- Fix error The supplied range exceeds the maximum array size ([#934](https://togithub.com/phpstan/phpstan-src/pull/934)), [#6375](https://togithub.com/phpstan/phpstan/issues/6375), thanks [@voku](https://togithub.com/voku)!
- Nullable union template type bound is actually supported (https://github.com/phpstan/phpstan-src/commit/1d8b2eb269b1de8c449b372580852c2a6307c323), [#4656](https://togithub.com/phpstan/phpstan/issues/4656), [#5305](https://togithub.com/phpstan/phpstan/issues/5305), [#3384](https://togithub.com/phpstan/phpstan/issues/3384)
- Fix reporting nonexistent offset in `isset()` (https://github.com/phpstan/phpstan-src/commit/f05e8eb8fe3d979afa9e627371f4df92ab28fadf), [#4926](https://togithub.com/phpstan/phpstan/issues/4926)
- Fix interaction between template type and intersection type ([#955](https://togithub.com/phpstan/phpstan-src/pull/955)), [#6210](https://togithub.com/phpstan/phpstan/issues/6210), thanks [@arnaud-lb](https://togithub.com/arnaud-lb)!
- Fix tests on 32-bit ([#957](https://togithub.com/phpstan/phpstan-src/pull/957)), thanks [@herndlm](https://togithub.com/herndlm)!
- Fix resolving type of `isset()`, `empty()` and null coalesce operator (`??`) (https://github.com/phpstan/phpstan-src/commit/3b17acc5de4ac507d678f9ca9b2cd15937921ffb), [#4592](https://togithub.com/phpstan/phpstan/issues/4592), [#4903](https://togithub.com/phpstan/phpstan/issues/4903), [#2420](https://togithub.com/phpstan/phpstan/issues/2420), [#2718](https://togithub.com/phpstan/phpstan/issues/2718), [#3126](https://togithub.com/phpstan/phpstan/issues/3126), [#4586](https://togithub.com/phpstan/phpstan/issues/4586), [#4887](https://togithub.com/phpstan/phpstan/issues/4887)
# Function signature fixes π€
- Narrow down the return type of the `Throwable::getTrace()` method ([#914](https://togithub.com/phpstan/phpstan-src/pull/914)), thanks [@ste93cry](https://togithub.com/ste93cry)!
- Fix DOMDocument::saveXML signature ([#956](https://togithub.com/phpstan/phpstan-src/pull/956)), thanks [@kissifrot](https://togithub.com/kissifrot)!
### [`v1.4.3`](https://togithub.com/phpstan/phpstan/releases/1.4.3)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.4.2...1.4.3)
# Improvements π§
- Support for `--memory-limit` CLI option in `clear-result-cache` command (https://github.com/phpstan/phpstan-src/commit/156700b5152ada253edba34b39cda955729e97a8), [#6432](https://togithub.com/phpstan/phpstan/issues/6432)
- Pass verbosity to workers and show stack trace on error ([#935](https://togithub.com/phpstan/phpstan-src/pull/935)), thanks [@benja-M-1](https://togithub.com/benja-M-1)!
- Move collecting errors from error handler from Analyser to FileAnalyser to be used in parallel runs too (https://github.com/phpstan/phpstan-src/commit/7dd699f9461704a8ef2f4505f1dec534f13e7ccd)
- Use memory limit management trick from Laravel instead of the current `.memory_limit` file (https://github.com/phpstan/phpstan-src/commit/daf7d5577bd8c796509768eb6a8d2862b6027a53), https://twitter.com/timacdonald87/status/1484804225658146823
# Bugfixes π
- Fix unset() on intersection with hasOffset (https://github.com/phpstan/phpstan-src/commit/b43c057d2d34448b421cd879320974f393d992ac), [#6399](https://togithub.com/phpstan/phpstan/issues/6399), [#4357](https://togithub.com/phpstan/phpstan/issues/4357)
- ConstantStringType - catch Error in setOffsetValueType (https://github.com/phpstan/phpstan-src/commit/54f67c5252fe1a4eff30703875b734111ab46e5a), [#6231](https://togithub.com/phpstan/phpstan/issues/6231)
- Fix reflection error for the attribute `#[ReturnTypeWillChange]` on PHP 7.1-7.4 (https://github.com/ondrejmirtes/BetterReflection/commit/bf362441dceecd766dbd54bd470c7b4c333e4c13, https://github.com/phpstan/phpstan-src/commit/639a055975fceffe94902fee9d90bff88ec11cf0), [#6414](https://togithub.com/phpstan/phpstan/issues/6414)
- Fix `array_filter` with callback that always evaluates to false ([#939](https://togithub.com/phpstan/phpstan-src/pull/939)), thanks [@herndlm](https://togithub.com/herndlm)!
- Fix iterable key and value type - prefer generic type variables instead of key()/current() typehints (https://github.com/phpstan/phpstan-src/commit/a2acf64f793976a21f22babbfc27318a60fea4fa), [#5817](https://togithub.com/phpstan/phpstan/issues/5817)
- Fix trait detection recursion for anonymous classes ([#946](https://togithub.com/phpstan/phpstan-src/pull/946)), thanks [@herndlm](https://togithub.com/herndlm)!
- Fix internal error with a big number in for loop condition (https://github.com/phpstan/phpstan-src/commit/f1734dc5318d1777c7ae6e77d4d3777182e845aa), [#6466](https://togithub.com/phpstan/phpstan/issues/6466)
# Function signature fixes π€
- Add missing `Ds\Set::reduce()` to stubs ([#942](https://togithub.com/phpstan/phpstan-src/pull/942)), thanks [@ZebulanStanphill](https://togithub.com/ZebulanStanphill)!
- Refine `*strlen()` return type to exclude negative integers ([#945](https://togithub.com/phpstan/phpstan-src/pull/945)), thanks [@staabm](https://togithub.com/staabm)!
- Bugfix `DatePeriod::getEndDate` declaration ([#951](https://togithub.com/phpstan/phpstan-src/pull/951)), thanks [@nyamsprod](https://togithub.com/nyamsprod)!
### [`v1.4.2`](https://togithub.com/phpstan/phpstan/releases/1.4.2)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.4.1...1.4.2)
- CleaningParser - remove conditional code by `PHP_VERSION_ID` (https://github.com/phpstan/phpstan-src/commit/433511a3eb526b0a340277aeb48ff20f292922d1), [#6386](https://togithub.com/phpstan/phpstan/issues/6386), [https://github.com/api-platform/core/issues/4614](https://togithub.com/api-platform/core/issues/4614), [https://github.com/api-platform/api-platform/issues/2101](https://togithub.com/api-platform/api-platform/issues/2101)
- Enums will no longer crash the playground (https://github.com/phpstan/phpstan-src/commit/121e0212db869fe0c42307a1485f27054d492041)
- Fix `ObjectType::equals()` when compared to `EnumCaseObjectType` (https://github.com/phpstan/phpstan-src/commit/ab0245c49a16609da528d8e91dc5124b2c911ecb), [#6394](https://togithub.com/phpstan/phpstan/issues/6394)
- Fix calling method statically on string (https://github.com/phpstan/phpstan-src/commit/3aa878f2b22907b440055a714c605e8bb6e3de58), [#6404](https://togithub.com/phpstan/phpstan/issues/6404)
- Fix native type of variadic parameter (https://github.com/phpstan/phpstan-src/commit/a5447db695e55151c52d5cf67b489fceb7d51c43), [#6393](https://togithub.com/phpstan/phpstan/issues/6393), [#5698](https://togithub.com/phpstan/phpstan/issues/5698)
- Update PhpStorm stubs ([#930](https://togithub.com/phpstan/phpstan-src/pull/930))
### [`v1.4.1`](https://togithub.com/phpstan/phpstan/releases/1.4.1)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.4.0...1.4.1)
# Improvements π§
- TypeSpecifier - understand `==` operator for the same types on both sides (https://github.com/phpstan/phpstan-src/commit/e40eff0a8e34ceae776e38d48a31efbe67ea399a), [#6370](https://togithub.com/phpstan/phpstan/issues/6370), [#4413](https://togithub.com/phpstan/phpstan/issues/4413)
- Add `ClassReflection::getBackedEnumType()` method (https://github.com/phpstan/phpstan-src/commit/a0ed2d304e0344df34b49e010d5f491f0d321d3a)
- Achieve `BenevolentUnionType` return type without dynamic return type extension (https://github.com/phpstan/phpstan-src/commit/723dfc51eab190ff940d0b0130b9986eb1b5d36a), [https://github.com/phpstan/phpstan/discussions/6391](https://togithub.com/phpstan/phpstan/discussions/6391)
# Bugfixes π
- Allow readonly property write in `__unserialize` ([#929](https://togithub.com/phpstan/phpstan-src/pull/929)), thanks [@ruudk](https://togithub.com/ruudk)!
- Fix missing properties on `UnitEnum` and `BackedEnum` (https://github.com/phpstan/phpstan-src/commit/67d3a882a85e53f36158e60a8cb30e997aca293c), [#6385](https://togithub.com/phpstan/phpstan/issues/6385)
- `ConstantArrayTypeBuilder` - fix for potential performance problems (https://github.com/phpstan/phpstan-src/commit/86b93068ae863a0377118dfe93c3b1286a8673b7), [#6375](https://togithub.com/phpstan/phpstan/issues/6375)
# Function signature fixes π€
- Add missing `Set::map()` method to functionMap ([#923](https://togithub.com/phpstan/phpstan-src/pull/923)), thanks [@simPod](https://togithub.com/simPod)!
- `gnupg_verify()` accepts false fot its signature param ([#925](https://togithub.com/phpstan/phpstan-src/pull/925)), thanks [@spaze](https://togithub.com/spaze)!
- Improve signature of `random_bytes()` ([#926](https://togithub.com/phpstan/phpstan-src/pull/926)), thanks [@staabm](https://togithub.com/staabm)!
- More precise `count_chars()` mode-param ([#927](https://togithub.com/phpstan/phpstan-src/pull/927)), thanks [@staabm](https://togithub.com/staabm)!
- More precise `getdate()` return type ([#928](https://togithub.com/phpstan/phpstan-src/pull/928)), thanks [@staabm](https://togithub.com/staabm)!
### [`v1.4.0`](https://togithub.com/phpstan/phpstan/releases/1.4.0)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.3.3...1.4.0)
**This release fixes 25 issues! π**
# Major new features π
- Support for PHP 8.1 `readonly` properties ([RFC](https://wiki.php.net/rfc/readonly_properties_v2))
- Readonly properties must be assigned in the constructor of the declaring class
- Memoized type of a readonly property is not invalidated even when calling a method with side effects
- Readonly properties cannot be passed by reference
- Improved detection of incorrect types assigned to properties:
- [#5804](https://togithub.com/phpstan/phpstan/issues/5804), [#6333](https://togithub.com/phpstan/phpstan/issues/6333), [#4906](https://togithub.com/phpstan/phpstan/issues/4906), [#4165](https://togithub.com/phpstan/phpstan/issues/4165), [#3703](https://
Configuration
π Schedule: At any time (no schedule defined).
π¦ Automerge: Disabled by config. Please merge this manually once you are satisfied.
β» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
π Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, click this checkbox.
This PR contains the following updates:
0.12.90
->1.5.7
Release Notes
phpstan/phpstan
### [`v1.5.7`](https://togithub.com/phpstan/phpstan/releases/1.5.7) [Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.6...1.5.7) # Bugfixes π - Fix `array_merge` with numeric keys ([#1218](https://togithub.com/phpstan/phpstan-src/pull/1218)), thanks [@herndlm](https://togithub.com/herndlm)! - Fix `ConstantArrayTypeBuilder` optional keys via `setOffsetValueType` ([#1225](https://togithub.com/phpstan/phpstan-src/pull/1225)), thanks [@herndlm](https://togithub.com/herndlm)! - Fix `array_push` with an empty constant array ([#1210](https://togithub.com/phpstan/phpstan-src/pull/1210)), [#6974](https://togithub.com/phpstan/phpstan/issues/6974), thanks [@herndlm](https://togithub.com/herndlm)! - Fix `array_push` / `array_unshift` with `ConstantArrayType` arguments ([#1232](https://togithub.com/phpstan/phpstan-src/pull/1232)), [#5783](https://togithub.com/phpstan/phpstan/issues/5783), thanks [@herndlm](https://togithub.com/herndlm)! - Fix variadic parameters for generics (https://github.com/phpstan/phpstan-src/commit/f091c5629a48620972c657993032522def8a840d), [#7068](https://togithub.com/phpstan/phpstan/issues/7068) - PHPStan Pro download API - pass current PHP version (https://github.com/phpstan/phpstan-src/commit/9044bfc33d254858ce44969848230477cb8f3ca7) - PHPStan Pro - fix for potential issues on temp files (https://github.com/phpstan/phpstan-src/commit/2a145bad4e3d171e3a917e0f1f3e757bd5a6c523) - Improve variadic parameter support in `array_merge` ([#1233](https://togithub.com/phpstan/phpstan-src/pull/1233)), thanks [@herndlm](https://togithub.com/herndlm)! ### [`v1.5.6`](https://togithub.com/phpstan/phpstan/releases/1.5.6) [Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.5...1.5.6) This release enables to write forward-compatible custom rules with PHPStan 1.6.0+Bleeding Edge. Detailed instructions are here: https://phpstan.org/blog/preprocessing-ast-for-custom-rules - Allow registering of custom rich parser node visitors (https://github.com/phpstan/phpstan-src/commit/b0dafcc4921bb6e3b0e5db5065b4989c3b350bab) ### [`v1.5.5`](https://togithub.com/phpstan/phpstan/releases/1.5.5) [Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.4...1.5.5) # Improvements π§ - Remove unnecessary `ConstantArrayType::getKeyType()` ([#1173](https://togithub.com/phpstan/phpstan-src/pull/1173)), thanks [@herndlm](https://togithub.com/herndlm)! - Improve `ConstantArrayType` union performance ([#1176](https://togithub.com/phpstan/phpstan-src/pull/1176)), thanks [@herndlm](https://togithub.com/herndlm)! - Do not evaluate constructors as having side effects by default, Handle side effects of constructors in `new` ([#1205](https://togithub.com/phpstan/phpstan-src/pull/1205)), thanks [@VasekPurchart](https://togithub.com/VasekPurchart)! # Bleeding edge πͺ - Specify explicit mixed array type via `is_array` ([#1191](https://togithub.com/phpstan/phpstan-src/pull/1191)), thanks [@herndlm](https://togithub.com/herndlm)! *If you want to see the shape of things to come and adopt bleeding edge features early, you can include this config file in your project's `phpstan.neon`:* includes: - vendor/phpstan/phpstan/conf/bleedingEdge.neon *Of course, there are no backwards compatibility guarantees when you include this file. The behaviour and reported errors can change in minor versions with this file included. [Learn more](https://phpstan.org/blog/what-is-bleeding-edge)* # Bugfixes π - Fix `curl_getinfo($ch, CURLINFO_CONTENT_TYPE)` ([#1170](https://togithub.com/phpstan/phpstan-src/pull/1170)), [#6929](https://togithub.com/phpstan/phpstan/issues/6929), thanks [@oschwald](https://togithub.com/oschwald)! - Fix return types for `bcdiv()`, `bcmod()`, `bcpowmod()` and `bcsqrt()` in PHP 8.0 and higher ([#1152](https://togithub.com/phpstan/phpstan-src/pull/1152)), [#5134](https://togithub.com/phpstan/phpstan/issues/5134), thanks [@W0rma](https://togithub.com/W0rma)! - Add support for `int` and `bool` args for `strlen()` ([#1162](https://togithub.com/phpstan/phpstan-src/pull/1162)), thanks [@fluffycondor](https://togithub.com/fluffycondor)! - Add support for `float` and `null` for `strlen()`, improve support for booleans ([#1199](https://togithub.com/phpstan/phpstan-src/pull/1199)), thanks [@fluffycondor](https://togithub.com/fluffycondor)! - Feature/undefined expression allowed ([#1174](https://togithub.com/phpstan/phpstan-src/pull/1174)), [#6107](https://togithub.com/phpstan/phpstan/issues/6107), [#5971](https://togithub.com/phpstan/phpstan/issues/5971), [#5337](https://togithub.com/phpstan/phpstan/issues/5337), [#6899](https://togithub.com/phpstan/phpstan/issues/6899), thanks [@rajyan](https://togithub.com/rajyan)! - Fix/coalesce simulate ternary ([#1193](https://togithub.com/phpstan/phpstan-src/pull/1193)), thanks [@rajyan](https://togithub.com/rajyan)! - Support variadic parameter in `array_replace` ([#1209](https://togithub.com/phpstan/phpstan-src/pull/1209)), [#7020](https://togithub.com/phpstan/phpstan/issues/7020), thanks [@herndlm](https://togithub.com/herndlm)! - ObjectType - fix imprecise cache key issue (https://github.com/phpstan/phpstan-src/commit/ee934468b707f46d0416bba7b89cc33d3a0d7cd7), [#6944](https://togithub.com/phpstan/phpstan/issues/6944) - Fix int overflow internal error (https://github.com/phpstan/phpstan-src/commit/c5d0902d2b3fbf8f00913002f9ba72b6caa929a0), [#6979](https://togithub.com/phpstan/phpstan/issues/6979) # Function signature fixes π€ - `DOMText::splitText()` may return false ([#1180](https://togithub.com/phpstan/phpstan-src/pull/1180)), thanks [@xPaw](https://togithub.com/xPaw)! - `Collator` creation function/method can return null ([#1182](https://togithub.com/phpstan/phpstan-src/pull/1182)), thanks [@finwe](https://togithub.com/finwe)! - Fix return signature of `SplObjectStorage` methods ([#1185](https://togithub.com/phpstan/phpstan-src/pull/1185)), thanks [@Furgas](https://togithub.com/Furgas)! - Fix return signature of `SimpleXMLElement::getDocNamespaces` ([#1190](https://togithub.com/phpstan/phpstan-src/pull/1190)), thanks [@Furgas](https://togithub.com/Furgas)! ### [`v1.5.4`](https://togithub.com/phpstan/phpstan/releases/1.5.4) [Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.3...1.5.4) # Bugfixes π - Support named arguments when resolving template parameters ([#1151](https://togithub.com/phpstan/phpstan-src/pull/1151)), [#5262](https://togithub.com/phpstan/phpstan/issues/5262), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)! - Various fixes for constant arrays ([#1154](https://togithub.com/phpstan/phpstan-src/pull/1154)), [#4308](https://togithub.com/phpstan/phpstan/issues/4308), [#6965](https://togithub.com/phpstan/phpstan/issues/6965), [#6961](https://togithub.com/phpstan/phpstan/issues/6961), [#6383](https://togithub.com/phpstan/phpstan/issues/6383), [#5933](https://togithub.com/phpstan/phpstan/issues/5933), [#5382](https://togithub.com/phpstan/phpstan/issues/5382), [#6379](https://togithub.com/phpstan/phpstan/issues/6379), [#3284](https://togithub.com/phpstan/phpstan/issues/3284) - Fix for arrays not being accepted when having an accessory type (https://github.com/phpstan/phpstan-src/commit/843ebbb1d889ac4d9a152a52f1f1ee9690d2e721), [#6552](https://togithub.com/phpstan/phpstan/issues/6552) - Avoid describing ConstantArrayType values twice ([#1168](https://togithub.com/phpstan/phpstan-src/pull/1168), [#1169](https://togithub.com/phpstan/phpstan-src/pull/1169)), thanks [@herndlm](https://togithub.com/herndlm)! - Fix false positive `UnhandledMatchError` throw point ([#1165](https://togithub.com/phpstan/phpstan-src/pull/1165)), [#6910](https://togithub.com/phpstan/phpstan/issues/6910), thanks [@rajyan](https://togithub.com/rajyan)! - Fix `in_array()` bug (https://github.com/phpstan/phpstan-src/commit/0ae28f761b2e0d473224aded78960d3d96b4e31e) - Various optimization attempts (https://github.com/phpstan/phpstan-src/commit/91c7507787b4a9a63568562cda35644f139460c2, https://github.com/phpstan/phpstan-src/commit/5400b5858ef1750ede656dffc894acbbbc228e88, https://github.com/phpstan/phpstan-src/commit/c4c64fe6dae985d196aea92f3b7eca40e70c7ef4) # Function signature fixes π€ - added `show_source()` signature, an alias of `highlight_file()` ([#1160](https://togithub.com/phpstan/phpstan-src/pull/1160)), thanks [@staabm](https://togithub.com/staabm)! - more precise `getenv()` signature ([#1161](https://togithub.com/phpstan/phpstan-src/pull/1161)), thanks [@staabm](https://togithub.com/staabm)! ### [`v1.5.3`](https://togithub.com/phpstan/phpstan/releases/1.5.3) [Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.2...1.5.3) # Improvements π§ - Update phpdoc-parser with multi-line union/intersection/conditional types support (https://github.com/phpstan/phpstan-src/commit/6fa7c9097d060e7eddd81adf7a6809eb94a221a6), [https://github.com/phpstan/phpdoc-parser/pull/114](https://togithub.com/phpstan/phpdoc-parser/pull/114), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)! # Bugfixes π - Mark `Memcached::HAVE_*` constants as dynamic ([#1142](https://togithub.com/phpstan/phpstan-src/pull/1142)), [#6263](https://togithub.com/phpstan/phpstan/issues/6263), thanks [@VasekPurchart](https://togithub.com/VasekPurchart)! - Improve return types for `array_fill_keys` and `array_combine` ([#1139](https://togithub.com/phpstan/phpstan-src/pull/1139)), thanks [@canvural](https://togithub.com/canvural)! - Guard `Equal` (`==`) expression specification with empty array on both sides ([#1143](https://togithub.com/phpstan/phpstan-src/pull/1143)), [#6940](https://togithub.com/phpstan/phpstan/issues/6940), thanks [@herndlm](https://togithub.com/herndlm)! - Fix huge union types result from "+"-array-merge operation ([#1141](https://togithub.com/phpstan/phpstan-src/pull/1141)), [#6936](https://togithub.com/phpstan/phpstan/issues/6936), thanks [@staabm](https://togithub.com/staabm)! - Improve return type of `array_fill_keys` for not constant arrays ([#1145](https://togithub.com/phpstan/phpstan-src/pull/1145)), thanks [@canvural](https://togithub.com/canvural)! - Handle `false` return in `substr()` with PHP < 8 ([#1144](https://togithub.com/phpstan/phpstan-src/pull/1144)), [#6939](https://togithub.com/phpstan/phpstan/issues/6939), thanks [@herndlm](https://togithub.com/herndlm)! - `array_merge` lost non-empty-string keys type ([#1135](https://togithub.com/phpstan/phpstan-src/pull/1135)), [#6927](https://togithub.com/phpstan/phpstan/issues/6927), [#5846](https://togithub.com/phpstan/phpstan/issues/5846), [#2567](https://togithub.com/phpstan/phpstan/issues/2567), thanks [@staabm](https://togithub.com/staabm)! ### [`v1.5.2`](https://togithub.com/phpstan/phpstan/releases/1.5.2) [Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.1...1.5.2) # Bugfixes π - Fix infinite recursion when caching types ([#1137](https://togithub.com/phpstan/phpstan-src/pull/1137)), [#6896](https://togithub.com/phpstan/phpstan/issues/6896), [#6911](https://togithub.com/phpstan/phpstan/issues/6911) - Fixing bugs by removing caching π - Timewise performance optimizations (https://github.com/phpstan/phpstan-src/commit/22f755c6a0bf5fd551634419680070fabf571a07) - Offseting the removal of PHPDocs cache ### [`v1.5.1`](https://togithub.com/phpstan/phpstan/releases/1.5.1) [Compare Source](https://togithub.com/phpstan/phpstan/compare/1.5.0...1.5.1) # Bugfixes π - `is_subclass_of()`: do not infer anything when context is falsy ([#1124](https://togithub.com/phpstan/phpstan-src/pull/1124)), [#6891](https://togithub.com/phpstan/phpstan/issues/6891), thanks [@VincentLanglet](https://togithub.com/VincentLanglet)! - Fix inferring template types on intersection types ([#1122](https://togithub.com/phpstan/phpstan-src/pull/1122)), [#6904](https://togithub.com/phpstan/phpstan/issues/6904), [#6917](https://togithub.com/phpstan/phpstan/issues/6917), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)! # Function signature fixes π€ - more precise `getTrace()` return-type ([#1123](https://togithub.com/phpstan/phpstan-src/pull/1123)), thanks [@staabm](https://togithub.com/staabm)! - Fix type definition of curl "certinfo" array ([#1118](https://togithub.com/phpstan/phpstan-src/pull/1118)), thanks [@cs278](https://togithub.com/cs278)! - Update various DB functions for more specific row counts ([#1116](https://togithub.com/phpstan/phpstan-src/pull/1116)), thanks [@Seldaek](https://togithub.com/Seldaek)! - small signature update ([#1126](https://togithub.com/phpstan/phpstan-src/pull/1126)), thanks [@staabm](https://togithub.com/staabm)! # Internals π - tests: use unique namespace to prevent collisions ([#1119](https://togithub.com/phpstan/phpstan-src/pull/1119)), thanks [@staabm](https://togithub.com/staabm)! - ParaTest: leverage WrapperRunner for quicker tests ([#1115](https://togithub.com/phpstan/phpstan-src/pull/1115)), thanks [@Slamdunk](https://togithub.com/Slamdunk)! - LevelsTestCase performance improvement - clear result cache just once (https://github.com/phpstan/phpstan-src/commit/0a3e1a79738070c95e3a69406b33d9277a49840c) - Update phpdoc-parser to 1.4 (https://github.com/phpstan/phpstan-src/commit/6700eb69c1566190f3cad75fd5fa3edba64fce8e, https://github.com/phpstan/phpstan-src/commit/a3a7fad5b75dbf30e7685aac148e4b89b3e60509) - Update BetterReflection to 5.3 ([#1132](https://togithub.com/phpstan/phpstan-src/pull/1132)) ### [`v1.5.0`](https://togithub.com/phpstan/phpstan/releases/1.5.0) [Compare Source](https://togithub.com/phpstan/phpstan/compare/1.4.10...1.5.0) **This release fixes 26 issues! π** # Improvements π§ - Dropped support for PHP 7.1, PHPStan 1.5.0 runs on PHP 7.2-8.1. Users on PHP 7.1 accounted only for 0.8 % of installatoins. - Allow null as a return value when resolving return types ([#1061](https://togithub.com/phpstan/phpstan-src/pull/1061)), [#5855](https://togithub.com/phpstan/phpstan/issues/5855), thanks [@matthiasnoback](https://togithub.com/matthiasnoback)! - Output elapsed time per file in debug mode ([#1062](https://togithub.com/phpstan/phpstan-src/pull/1062)), [#5294](https://togithub.com/phpstan/phpstan/issues/5294), thanks [@janedbal](https://togithub.com/janedbal)! - A bit more precise concatenation of unions of literal strings ([#937](https://togithub.com/phpstan/phpstan-src/pull/937)), [#6439](https://togithub.com/phpstan/phpstan/issues/6439), thanks [@staabm](https://togithub.com/staabm)! - `OptimizedDirectorySourceLocator::locateIdentifiersByType()` returns all located classes or functions ([#1080](https://togithub.com/phpstan/phpstan-src/pull/1080)), thanks [@tomasfejfar](https://togithub.com/tomasfejfar)! - Backward compatibility promise: ReflectionProvider cannot be extended/implemented by 3rd party code (https://github.com/phpstan/phpstan-src/commit/e60d6d6e9637db8a00bfd11cf446fabb3d545aa2) - implement `ArraySearchFunctionTypeSpecifyingExtension` ([#1086](https://togithub.com/phpstan/phpstan-src/pull/1086)), [#6863](https://togithub.com/phpstan/phpstan/issues/6863), thanks [@staabm](https://togithub.com/staabm)! - added `ArrayReplaceFunctionReturnTypeExtension` ([#1087](https://togithub.com/phpstan/phpstan-src/pull/1087)), [#5327](https://togithub.com/phpstan/phpstan/issues/5327), thanks [@staabm](https://togithub.com/staabm)! - Dynamic return type extension for `curl_getinfo` ([#1072](https://togithub.com/phpstan/phpstan-src/pull/1072)), thanks [@PrinsFrank](https://togithub.com/PrinsFrank)! - Support intersection types in template bounds ([#1101](https://togithub.com/phpstan/phpstan-src/pull/1101)), [#6649](https://togithub.com/phpstan/phpstan/issues/6649), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)! - Support `value-ofConfiguration
π Schedule: At any time (no schedule defined).
π¦ Automerge: Disabled by config. Please merge this manually once you are satisfied.
β» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
π Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by WhiteSource Renovate. View repository job log here.