phpstan/phpstan (phpstan/phpstan)
### [`v1.12.10`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.10)
[Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.9...1.12.10)
# Bugfixes π
- ClassReflection: resolve missing template type to its default (if set) rather than bound ([#3623](https://redirect.github.com/phpstan/phpstan-src/pull/3623)), [#11899](https://redirect.github.com/phpstan/phpstan/issues/11899), thanks [@jiripudil](https://redirect.github.com/jiripudil)!
- Fix `for` endless loop detection ([#3622](https://redirect.github.com/phpstan/phpstan-src/pull/3622)), [#11992](https://redirect.github.com/phpstan/phpstan/issues/11992), thanks [@herndlm](https://redirect.github.com/herndlm)!
- Fix tagging Docker image (https://github.com/phpstan/phpstan/commit/379b9a230ededc558195620de0f31d251bbe6166)
### [`v1.12.9`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.9)
[Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.8...1.12.9)
# Improvements π§
- Support `@readonly` PHPDoc on the class as alternative to `@immutable` ([#3523](https://redirect.github.com/phpstan/phpstan-src/pull/3523)), [#11775](https://redirect.github.com/phpstan/phpstan/issues/11775), thanks [@herndlm](https://redirect.github.com/herndlm)!
# Bugfixes π
- Fix too early lowercase-string inference ([#3585](https://redirect.github.com/phpstan/phpstan-src/pull/3585)), [#11852](https://redirect.github.com/phpstan/phpstan/issues/11852), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Support `for` endless loops ([#3573](https://redirect.github.com/phpstan/phpstan-src/pull/3573)), [#6807](https://redirect.github.com/phpstan/phpstan/issues/6807), [#8463](https://redirect.github.com/phpstan/phpstan/issues/8463), [#9374](https://redirect.github.com/phpstan/phpstan/issues/9374), thanks [@herndlm](https://redirect.github.com/herndlm)!
- More precise types for `preg_match` greater than `0` ([#3612](https://redirect.github.com/phpstan/phpstan-src/pull/3612)), [#11293](https://redirect.github.com/phpstan/phpstan/issues/11293), thanks [@staabm](https://redirect.github.com/staabm)!
- Too-wide return type - do not report void in PHPDoc union type (https://github.com/phpstan/phpstan-src/commit/5f0b1ccfa47060c209ead7116005214183c0e56f), [#11980](https://redirect.github.com/phpstan/phpstan/issues/11980)
- Too-wide return type - allow `void` return type in a union when the returned expr is originally `void` (https://github.com/phpstan/phpstan-src/commit/80c1df2d73210227776db5443dbc28c2d71fa289), [#11980](https://redirect.github.com/phpstan/phpstan/issues/11980)
- RichParser - fix `@phpstan-ignore` with trait in the same file (https://github.com/phpstan/phpstan-src/commit/381c1370e7ce3b1c2d8de6c5b30913908c362eb8), [#11981](https://redirect.github.com/phpstan/phpstan/issues/11981)
# Internals π
- Result DTOs - make reasons unique (https://github.com/phpstan/phpstan-src/commit/ccfb4ab7a19151925b9434e3245892006b3d9dcd)
### [`v1.12.8`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.8)
[Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.7...1.12.8)
# Improvements π§
- OffsetAccessValueAssignmentRule optimization for huge arrays (https://github.com/phpstan/phpstan-src/commit/a07996a9cad15c0c6e6e8fd57338236734a5c0dd)
- Fix performance issue with big appended arrays (https://github.com/phpstan/phpstan-src/commit/537c12c0c3f14371ceaf59051fc5445339857a97), [#11913](https://redirect.github.com/phpstan/phpstan/issues/11913)
- processAssignVar optimization for arrays (https://github.com/phpstan/phpstan-src/commit/16f63b3a48105ddce37d816e157f004fe9164cf9),
- Another micro optimization (https://github.com/phpstan/phpstan-src/commit/c04555b9387dea448a5649348546e9629063dda8)
- Optimization of huge unions of oversized arrays (https://github.com/phpstan/phpstan-src/commit/4dfbe16ed9cdf0808027f3bcbdb26980ec39df3f)
- Avoid new HasOffsetValueType being intersected with oversized array (https://github.com/phpstan/phpstan-src/commit/deef91983766dd61c18d4f9d819ffc94fb701cd5)
- Add ArrayFindFunctionReturnTypeExtension (PHP 8.4) ([#3518](https://redirect.github.com/phpstan/phpstan-src/pull/3518), [#3608](https://redirect.github.com/phpstan/phpstan-src/pull/3608)), thanks [@zonuexe](https://redirect.github.com/zonuexe)!
# Bugfixes π
- Do not transform `$this` in return type even in final classes ([#3599](https://redirect.github.com/phpstan/phpstan-src/pull/3599)), [#11857](https://redirect.github.com/phpstan/phpstan/issues/11857), thanks [@calebdw](https://redirect.github.com/calebdw)!
- Exclude `E_DEPRECATED` from error_reporting (https://github.com/phpstan/phpstan-src/commit/277e34b23a43b7ff0cca0c141789d0a786690e9b), [#11937](https://redirect.github.com/phpstan/phpstan/issues/11937)
- More precise types in immediately invoked callables ([#3593](https://redirect.github.com/phpstan/phpstan-src/pull/3593), [#3602](https://redirect.github.com/phpstan/phpstan-src/pull/3602)), [#11561](https://redirect.github.com/phpstan/phpstan/issues/11561), [#11945](https://redirect.github.com/phpstan/phpstan/issues/11945), thanks [@staabm](https://redirect.github.com/staabm)!
- Only use last for condition to filter scope ([#3578](https://redirect.github.com/phpstan/phpstan-src/pull/3578)), thanks [@herndlm](https://redirect.github.com/herndlm)!
- Preserve correct UnionType subclass in `filterTypes()` ([#3535](https://redirect.github.com/phpstan/phpstan-src/pull/3535)), [#11663](https://redirect.github.com/phpstan/phpstan/issues/11663), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
# Function signature fixes π€
- `Imagick::writeImage(s)File` supporting `format` parameter ([#3588](https://redirect.github.com/phpstan/phpstan-src/pull/3588)), thanks [@kingjia90](https://redirect.github.com/kingjia90)!
# Internals π
- Remove unnecessary `instanceof ConstantBooleanType` in loop analysis ([#3577](https://redirect.github.com/phpstan/phpstan-src/pull/3577)), [#11913](https://redirect.github.com/phpstan/phpstan/issues/11913), thanks [@herndlm](https://redirect.github.com/herndlm)!
- NodeScopeResolver - refactoring before optimization (https://github.com/phpstan/phpstan-src/commit/1a0099dc61674ff1eb0ef8d68c90011f2206a64b)
- Add `@api` to TypeExpr ([#3601](https://redirect.github.com/phpstan/phpstan-src/pull/3601)), thanks [@ruudk](https://redirect.github.com/ruudk)!
- Split ArrayFilterFunctionReturnTypeExtension to Helper ([#3606](https://redirect.github.com/phpstan/phpstan-src/pull/3606)), thanks [@zonuexe](https://redirect.github.com/zonuexe)!
- Introduce `UnionType::filterTypes` ([#3607](https://redirect.github.com/phpstan/phpstan-src/pull/3607)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
### [`v1.12.7`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.7)
[Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.6...1.12.7)
# Major new features π
- **Implement template default types** ([#3457](https://redirect.github.com/phpstan/phpstan-src/pull/3457)), [#4801](https://redirect.github.com/phpstan/phpstan/issues/4801), thanks [@jiripudil](https://redirect.github.com/jiripudil)!
- See https://x.com/OndrejMirtes/status/1843920480342057154
# Improvements π§
- Move result cache output from debug (`-vvv`) to very verbose (`-vv`) mode ([#3345](https://redirect.github.com/phpstan/phpstan-src/pull/3345)), thanks [@janedbal](https://redirect.github.com/janedbal)!
- Support for `non-empty-array` and `non-empty-list` array shape kind (https://github.com/phpstan/phpstan-src/commit/107a7e38e2173d8b8b4f18e5d592fc8ead02b96a)
- Improve lowercase string verbosity level ([#3567](https://redirect.github.com/phpstan/phpstan-src/pull/3567)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Show TypeResult reasons in StrictComparisonOfDifferentTypesRule (https://github.com/phpstan/phpstan-src/commit/34bacd74410573cf79754348231849b474b7312e)
- Decorate reasons when comparing ConstantArrayType (https://github.com/phpstan/phpstan-src/commit/dc5d8f4d3eef18b1d80b8ffb3a1adfe8de6d7268), [#11799](https://redirect.github.com/phpstan/phpstan/issues/11799), [#10421](https://redirect.github.com/phpstan/phpstan/issues/10421)
# Bugfixes π
- Fix nextAutoIndexes in array coming from ArrayCombineFunctionReturnTypeExtension (https://github.com/phpstan/phpstan-src/commit/c4ba43462cecb03ef57805ffd683f77d57b79a4a), [#11819](https://redirect.github.com/phpstan/phpstan/issues/11819)
- Fix return type of `array_reverse()` with optional keys ([#3406](https://redirect.github.com/phpstan/phpstan-src/pull/3406)), [#11549](https://redirect.github.com/phpstan/phpstan/issues/11549), thanks [@herndlm](https://redirect.github.com/herndlm)!
- Try to quit the child process only after internal errors were accounted for (https://github.com/phpstan/phpstan-src/commit/dcd69eba14ed57b32c2f1b759cd8289772f364ac), [#11826](https://redirect.github.com/phpstan/phpstan/issues/11826)
- react/http PHP 8.4 patch (https://github.com/phpstan/phpstan-src/commit/40e461d2e8dff171cdf588e380eb20e782e94eb1)
# Function signature fixes π€
- functionMap: more precise `get_defined_vars()` ([#3546](https://redirect.github.com/phpstan/phpstan-src/pull/3546)), thanks [@janedbal](https://redirect.github.com/janedbal)!
- Reflection `getAttributes` returns `list` ([#3548](https://redirect.github.com/phpstan/phpstan-src/pull/3548)), thanks [@ManuelHu](https://redirect.github.com/ManuelHu)!
- More precise md5/sha1 return type ([#3541](https://redirect.github.com/phpstan/phpstan-src/pull/3541)), thanks [@staabm](https://redirect.github.com/staabm)!
- Improve return type of token_name() and PhpToken::getTokenName() ([#3558](https://redirect.github.com/phpstan/phpstan-src/pull/3558)), [#11808](https://redirect.github.com/phpstan/phpstan/issues/11808), thanks [@zonuexe](https://redirect.github.com/zonuexe)!
# Internals π
- Fix typo (https://github.com/phpstan/phpstan-src/commit/5b43d5004648ded12d5a635db9bb82c56efc2c11)
- Introduce isSuperTypeOfWithReason ([#3538](https://redirect.github.com/phpstan/phpstan-src/pull/3538)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Add function `PHPStan\dumpPhpDocType()` ([#3559](https://redirect.github.com/phpstan/phpstan-src/pull/3559)), [#11561](https://redirect.github.com/phpstan/phpstan/issues/11561), thanks [@zonuexe](https://redirect.github.com/zonuexe)!
- Introduce TypeResult (https://github.com/phpstan/phpstan-src/commit/a815d575dc10616e510713e01627369b10980d31)
### [`v1.12.6`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.6)
[Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.5...1.12.6)
# Bleeding edge πͺ
- Added absent type checks about `@phpstan-assert` PHPDoc tags (https://github.com/phpstan/phpstan-src/commit/ca0a7e9955397eef453b38c94ac67ba6faf7356b), [#11780](https://redirect.github.com/phpstan/phpstan/issues/11780)
*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)*
# Improvements π§
- Update nikic/php-parser to v4.19.4 (https://github.com/phpstan/phpstan-src/commit/0b9ce98cfad4a1f7e98e85c2cbd813025dbafa77)
- Process `ClassConstFetch::$class` when it's a Name node (https://github.com/phpstan/phpstan-src/commit/712c33e02ea2d95542cd333a493e276b22399773)
- Process `ClassConstFetch::$name` (https://github.com/phpstan/phpstan-src/commit/b38c852c7c9e1e49baa0dc8700dd13df531d0938)
- Fix unused private property is not sometimes detected ([#3539](https://redirect.github.com/phpstan/phpstan-src/pull/3539)), [#11802](https://redirect.github.com/phpstan/phpstan/issues/11802), thanks [@staabm](https://redirect.github.com/staabm)!
# Bugfixes π
- Fixes for `lowercase-string`
- Keep lowercase when trim ([#3491](https://redirect.github.com/phpstan/phpstan-src/pull/3491)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Add support for str_repeat and str_pad for lowercase string ([#3490](https://redirect.github.com/phpstan/phpstan-src/pull/3490)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Update ReplaceFunctionsDynamicReturnTypeExtension for lowercase-string ([#3489](https://redirect.github.com/phpstan/phpstan-src/pull/3489)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Update parse_str for lowercase string ([#3492](https://redirect.github.com/phpstan/phpstan-src/pull/3492)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- More precise `IntegerRangeType::toString()` ([#3475](https://redirect.github.com/phpstan/phpstan-src/pull/3475)), thanks [@staabm](https://redirect.github.com/staabm)!
- Add support for lowercase-string on parse_url() ([#3493](https://redirect.github.com/phpstan/phpstan-src/pull/3493)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Improve Vsprintf inference ([#3496](https://redirect.github.com/phpstan/phpstan-src/pull/3496), [#3501](https://redirect.github.com/phpstan/phpstan-src/pull/3501)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Offset access on lowercase-string is lowercase-string ([#3502](https://redirect.github.com/phpstan/phpstan-src/pull/3502)), thanks [@staabm](https://redirect.github.com/staabm)!
- IntegerType::toString() is lowercase ([#3510](https://redirect.github.com/phpstan/phpstan-src/pull/3510)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Handle lowercase string in sprintf ([#3498](https://redirect.github.com/phpstan/phpstan-src/pull/3498)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Update composer/pcre (https://github.com/phpstan/phpstan-src/commit/3cdac94e67bf8e508b150e9ee0e3075b3105ad19), [#11786](https://redirect.github.com/phpstan/phpstan/issues/11786)
- Fix a few regex class parsing usecases ([#3488](https://redirect.github.com/phpstan/phpstan-src/pull/3488)), thanks [@mvorisek](https://redirect.github.com/mvorisek)!
- Fix preg_match_all with PREG_SET_ORDER does not see capture group as optional ([#3506](https://redirect.github.com/phpstan/phpstan-src/pull/3506)), [#11661](https://redirect.github.com/phpstan/phpstan/issues/11661), thanks [@staabm](https://redirect.github.com/staabm)!
- Fix false-positive with preg_match(): Strict comparison using === between '' and non-falsy-stringβ¦ween '' and non-falsy-string ([#3509](https://redirect.github.com/phpstan/phpstan-src/pull/3509)), [#11744](https://redirect.github.com/phpstan/phpstan/issues/11744), thanks [@staabm](https://redirect.github.com/staabm)!
# Function signature fixes π€
- functionMap: a bit more precise get_defined_constants ([#3537](https://redirect.github.com/phpstan/phpstan-src/pull/3537)), thanks [@janedbal](https://redirect.github.com/janedbal)!
- token_name() returns non-empty-string ([#3540](https://redirect.github.com/phpstan/phpstan-src/pull/3540)), thanks [@staabm](https://redirect.github.com/staabm)!
- curl_multi_getcontent() can return null ([#3527](https://redirect.github.com/phpstan/phpstan-src/pull/3527)), thanks [@staabm](https://redirect.github.com/staabm)!
- Update SplFileInfo::getPathInfo return type ([#3487](https://redirect.github.com/phpstan/phpstan-src/pull/3487)), thanks [@DannyvdSluijs](https://redirect.github.com/DannyvdSluijs)!
- Update return type of `spl_autoload_functions` on PHP8.0+ ([#2810](https://redirect.github.com/phpstan/phpstan-src/pull/2810)), thanks [@ManuelHu](https://redirect.github.com/ManuelHu)!
# Internals π
- Fix missing ltrim in regex parse ([#3495](https://redirect.github.com/phpstan/phpstan-src/pull/3495)), thanks [@mvorisek](https://redirect.github.com/mvorisek)!
- Un-deprecate ConstantTypeHelper (https://github.com/phpstan/phpstan-src/commit/3a83f6bec7eb4724d4f1b6c2dedbfe46c0b1112a)
- Introduce `Scope::getMaybeDefinedVariables()` ([#3521](https://redirect.github.com/phpstan/phpstan-src/pull/3521)), [#11772](https://redirect.github.com/phpstan/phpstan/issues/11772), thanks [@ruudk](https://redirect.github.com/ruudk)!
- TypeInferenceTestCase: allow asserting array offset certainty ([#3503](https://redirect.github.com/phpstan/phpstan-src/pull/3503)), thanks [@ruudk](https://redirect.github.com/ruudk)!
- Simplify preserveKeys TrinaryLogic creation in two extensions ([#3516](https://redirect.github.com/phpstan/phpstan-src/pull/3516)), thanks [@herndlm](https://redirect.github.com/herndlm)!
- Add `Type::sliceArray()` ([#3514](https://redirect.github.com/phpstan/phpstan/issues/3514)) ([#3514](https://redirect.github.com/phpstan/phpstan-src/pull/3514)), thanks [@herndlm](https://redirect.github.com/herndlm)!
- Set normalized in BenevolentUnionType ([#3522](https://redirect.github.com/phpstan/phpstan-src/pull/3522)), thanks [@herndlm](https://redirect.github.com/herndlm)!
- Refactor RegexGroupParser for more immutability and less pass-by-ref ([#3508](https://redirect.github.com/phpstan/phpstan-src/pull/3508)), thanks [@staabm](https://redirect.github.com/staabm)!
### [`v1.12.5`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.5)
[Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.4...1.12.5)
# Improvements π§
- Deprecate `ParametersAcceptorSelector::selectSingle()` (https://github.com/phpstan/phpstan-src/commit/23c53a2210b715f672ad3087dd476faf34bdec6e)
- See: https://github.com/phpstan/phpstan/blob/2.0.x/UPGRADING.md#removed-deprecated-parametersacceptorselectorselectsingle
- Introduce `lowercase-string` ([#3438](https://redirect.github.com/phpstan/phpstan-src/pull/3438)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- More precise mixed-type subtraction in `toInteger()` ([#3434](https://redirect.github.com/phpstan/phpstan-src/pull/3434)), thanks [@staabm](https://redirect.github.com/staabm)!
- More precise `MixedType::toString()` with subtracted type ([#3420](https://redirect.github.com/phpstan/phpstan-src/pull/3420)), thanks [@staabm](https://redirect.github.com/staabm)!
- More precise `MixedType::toBoolean()` with subtracted type ([#3471](https://redirect.github.com/phpstan/phpstan-src/pull/3471)), thanks [@staabm](https://redirect.github.com/staabm)!
- Improve loose comparison for integer ranges ([#3465](https://redirect.github.com/phpstan/phpstan-src/pull/3465)), [#11694](https://redirect.github.com/phpstan/phpstan/issues/11694), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Truthy `isset($arr[$k])` should narrow `$k` ([#3453](https://redirect.github.com/phpstan/phpstan-src/pull/3453)), [#11716](https://redirect.github.com/phpstan/phpstan/issues/11716), [#8559](https://redirect.github.com/phpstan/phpstan/issues/8559), thanks [@staabm](https://redirect.github.com/staabm)!
- `isset()` narrows string-key in int-keyed-array to numeric-string ([#3472](https://redirect.github.com/phpstan/phpstan-src/pull/3472)), thanks [@staabm](https://redirect.github.com/staabm)!
# Bugfixes π
- Add generic types for array_values ([#3456](https://redirect.github.com/phpstan/phpstan-src/pull/3456)), thanks [@schlndh](https://redirect.github.com/schlndh)!
- Support IntegerRangeType in ConstantStringType offset-value-type handling ([#3462](https://redirect.github.com/phpstan/phpstan-src/pull/3462)), thanks [@staabm](https://redirect.github.com/staabm)!
- Fix bug with oversized array ([#3461](https://redirect.github.com/phpstan/phpstan-src/pull/3461)), [#11703](https://redirect.github.com/phpstan/phpstan/issues/11703), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Fix ErrorType after ArrayDimFetch ([#3460](https://redirect.github.com/phpstan/phpstan-src/pull/3460)), thanks [@staabm](https://redirect.github.com/staabm)!
- Implement ClosureType::getReferencedTemplateTypes() ([#3458](https://redirect.github.com/phpstan/phpstan-src/pull/3458)), [#10609](https://redirect.github.com/phpstan/phpstan/issues/10609), thanks [@jiripudil](https://redirect.github.com/jiripudil)!
- Fix substracted union type describe ([#3360](https://redirect.github.com/phpstan/phpstan-src/pull/3360)), [#10227](https://redirect.github.com/phpstan/phpstan/issues/10227), thanks [@mvorisek](https://redirect.github.com/mvorisek)!
- Fix including relative path (https://github.com/phpstan/phpstan-src/commit/098fb9416779240fab9b2dea1ee730da69668014), [#11738](https://redirect.github.com/phpstan/phpstan/issues/11738)
- Fix `sprintf()` inference for constant values with format-width in pattern ([#3474](https://redirect.github.com/phpstan/phpstan-src/pull/3474)), thanks [@staabm](https://redirect.github.com/staabm)!
- Drop wrong float comparison for `filter_var()` ([#2656](https://redirect.github.com/phpstan/phpstan-src/pull/2656)), thanks [@mvorisek](https://redirect.github.com/mvorisek)!
# Function signature fixes π€
- Change `iptcparse` return type ([#3483](https://redirect.github.com/phpstan/phpstan-src/pull/3483)), thanks [@ManuelHu](https://redirect.github.com/ManuelHu)!
# Internals π
- More specific return type for methods used to analyse currently entered function or method (https://github.com/phpstan/phpstan-src/commit/0e2587fae6e65be54ecbd47d33277d3f529d44d1)
- PhpFunctionFromParserNodeReflection becomes ParametersAcceptorWithPhpDocs (https://github.com/phpstan/phpstan-src/commit/1bea5c79d53e06f6cdd481decba73b504fb4bec0)
- Use methods directly on PhpFunctionFromParserNodeReflection instead of `selectSingle()` when analysing function body in rules (https://github.com/phpstan/phpstan-src/commit/41916ba39d429d096d5234acedcfe75f22025785)
- Use methods directly on PhpFunctionFromParserNodeReflection instead of `selectSingle()` in MutatingScope (https://github.com/phpstan/phpstan-src/commit/865c618f82030cbc2e915c6da6bd424bc9b8aa41)
- Use `ParametersAcceptorSelector::selectFromArgs()` instead of `selectSingle()` wherever possible (https://github.com/phpstan/phpstan-src/commit/e283d3a6df7df502f3c3e70bc086dd2018dc965b)
- Use PhpFunctionFromParserNodeReflection as ParametersAcceptor in DependencyResolver (https://github.com/phpstan/phpstan-src/commit/7e216a274f00bf0a77a72628c884fdd4cb6c24c6)
- Use methods directly on PhpFunctionFromParserNodeReflection instead of `selectSingle()` in ParametersAcceptorSelector (https://github.com/phpstan/phpstan-src/commit/1322aaf1d029c8db49c4c72742cb3d46f56be132)
- Introduce `@internal` `getOnlyVariant()` method on FunctionReflection/ExtendedMethodReflection to use instead of `selectSingle()` (https://github.com/phpstan/phpstan-src/commit/714877be8cafc1ba08610929e4dcb0d43273cc8d)
- Add `Type::chunkArray()` ([#3408](https://redirect.github.com/phpstan/phpstan-src/pull/3408)), thanks [@herndlm](https://redirect.github.com/herndlm)!
- Add more mixed-type bool subtraction tests ([#3421](https://redirect.github.com/phpstan/phpstan-src/pull/3421)), thanks [@staabm](https://redirect.github.com/staabm)!
- Made IssetExpr part of BC promise (https://github.com/phpstan/phpstan-src/commit/5677025877c6a8aef51b500cd461e8dbda6dab8c)
- Refactor RegexGroupParser for more immutability and less pass-by-ref ([#3479](https://redirect.github.com/phpstan/phpstan-src/pull/3479)), thanks [@staabm](https://redirect.github.com/staabm)!
### [`v1.12.4`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.4)
[Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.3...1.12.4)
# Improvements π§
- Special internal error message for Larastan & Laravel (https://github.com/phpstan/phpstan-src/commit/475a18ce8e0e14e340d7a0939906fffa6dd28e8d), [#11641](https://redirect.github.com/phpstan/phpstan/issues/11641)
- Do not truncate offset key in error tip message ([#3437](https://redirect.github.com/phpstan/phpstan-src/pull/3437)), thanks [@ruudk](https://redirect.github.com/ruudk)!
- Errors with `argument.named` are ignorable now (https://github.com/phpstan/phpstan-src/commit/193b4f518d53eb3648b09ff131f83979067fec59)
- Normalize path in TypeInferenceTestCase ([#3449](https://redirect.github.com/phpstan/phpstan-src/pull/3449)), thanks [@staabm](https://redirect.github.com/staabm)!
- Fix duplicate paths in `composerAutoloaderProjectPaths` on Windows ([#3451](https://redirect.github.com/phpstan/phpstan-src/pull/3451)), thanks [@staabm](https://redirect.github.com/staabm)!
- Update nikic/php-parser to 4.19.2 (https://github.com/phpstan/phpstan-src/commit/05630e67fa3809191253e660765573263daab2b9)
- Allow toggling `treatPhpDocTypesAsCertain` tip ([#3452](https://redirect.github.com/phpstan/phpstan-src/pull/3452)), [#11689](https://redirect.github.com/phpstan/phpstan/issues/11689), thanks [@ruudk](https://redirect.github.com/ruudk)!
# Bugfixes π
- Fix conditional types in `array_map()` return value ([#3425](https://redirect.github.com/phpstan/phpstan-src/pull/3425)), [#10715](https://redirect.github.com/phpstan/phpstan/issues/10715), [#11056](https://redirect.github.com/phpstan/phpstan/issues/11056), [#10685](https://redirect.github.com/phpstan/phpstan/issues/10685), thanks [@rvanvelzen](https://redirect.github.com/rvanvelzen)!
- Fix false positive when extending SplObjectStorage on PHP < 8.4 by updating BetterReflection ([https://github.com/Roave/BetterReflection/pull/1448](https://redirect.github.com/Roave/BetterReflection/pull/1448), https://github.com/phpstan/phpstan-src/commit/fd25c2779ca7fd4decee7038282ab9743b16d167), [#11665](https://redirect.github.com/phpstan/phpstan/issues/11665), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Prevent warning in `range()` on PHP 7.x ([#3424](https://redirect.github.com/phpstan/phpstan-src/pull/3424)), thanks [@staabm](https://redirect.github.com/staabm)!
- Process expression assignments other than Variable in by-ref parameters (https://github.com/phpstan/phpstan-src/commit/d3a2a92fcd612bf42bbfd19cd3a5625481ff7522), [#11667](https://redirect.github.com/phpstan/phpstan/issues/11667), [#8781](https://redirect.github.com/phpstan/phpstan/issues/8781)
- Allow nonexistent other-than-Variable expressions in by-ref parameters (https://github.com/phpstan/phpstan-src/commit/00d2caf39514380610899b0a305413f60c1c5830), [#11617](https://redirect.github.com/phpstan/phpstan/issues/11617), [#5077](https://redirect.github.com/phpstan/phpstan/issues/5077), [#9361](https://redirect.github.com/phpstan/phpstan/issues/9361), [#7251](https://redirect.github.com/phpstan/phpstan/issues/7251), [#2313](https://redirect.github.com/phpstan/phpstan/issues/2313), [#11655](https://redirect.github.com/phpstan/phpstan/issues/11655), [#2634](https://redirect.github.com/phpstan/phpstan/issues/2634)
- Fix false positive when type casting in If\_ statement ([#3431](https://redirect.github.com/phpstan/phpstan-src/pull/3431)), [#11674](https://redirect.github.com/phpstan/phpstan/issues/11674), thanks [@staabm](https://redirect.github.com/staabm)!
- Simplify abs return type ([#3433](https://redirect.github.com/phpstan/phpstan-src/pull/3433)), [#9224](https://redirect.github.com/phpstan/phpstan/issues/9224), thanks [@rvanvelzen](https://redirect.github.com/rvanvelzen)!
- Fix late static binding calls ([#3361](https://redirect.github.com/phpstan/phpstan-src/pull/3361)), [#10469](https://redirect.github.com/phpstan/phpstan/issues/10469), thanks [@mvorisek](https://redirect.github.com/mvorisek)!
- Fix string types sorting ([#3441](https://redirect.github.com/phpstan/phpstan-src/pull/3441)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- RegexArrayShapeMatcher - Fix matching literal dot character ([#3444](https://redirect.github.com/phpstan/phpstan-src/pull/3444)), [#11699](https://redirect.github.com/phpstan/phpstan/issues/11699), thanks [@staabm](https://redirect.github.com/staabm)!
- Fix infer new templated type from initial assign into static property ([#3364](https://redirect.github.com/phpstan/phpstan-src/pull/3364)), [#5551](https://redirect.github.com/phpstan/phpstan/issues/5551), thanks [@mvorisek](https://redirect.github.com/mvorisek)!
- `range()` with float step should return an array of floats ([#3447](https://redirect.github.com/phpstan/phpstan-src/pull/3447)), [#11692](https://redirect.github.com/phpstan/phpstan/issues/11692), thanks [@staabm](https://redirect.github.com/staabm)!
- Narrow string on `*strlen()` with positive-int ([#3407](https://redirect.github.com/phpstan/phpstan-src/pull/3407)), [#11558](https://redirect.github.com/phpstan/phpstan/issues/11558), thanks [@staabm](https://redirect.github.com/staabm)!
- Fix late static binding calls for first class callable ([#3435](https://redirect.github.com/phpstan/phpstan-src/pull/3435)), thanks [@mvorisek](https://redirect.github.com/mvorisek)!
- E_ALL value is different on PHP 8.4 (https://github.com/phpstan/phpstan-src/commit/cb8f9103f4191f176d1b52cc45f661c3326f194f)
# Function signature fixes π€
- Fix SplObjectStorage generic stub for PHP 8.4 (https://github.com/phpstan/phpstan-src/commit/9d9fb560907fcd4f6dd16789af4278ac7f683736)
# Internals π
- Extract getMessageFromInternalError (https://github.com/phpstan/phpstan-src/commit/d047c7f8ef8da296d0498696635735eed1762a4e)
- Optimize NodeScopeResolverTest when running with `paratest` ([#3440](https://redirect.github.com/phpstan/phpstan-src/pull/3440)), thanks [@schlndh](https://redirect.github.com/schlndh)!
- Expose `Output::isDecorated` and `Output::isVeryVerbose` ([#3436](https://redirect.github.com/phpstan/phpstan-src/pull/3436)), thanks [@ruudk](https://redirect.github.com/ruudk)!
- Simplify SubstrDynamicReturnTypeExtension ([#3439](https://redirect.github.com/phpstan/phpstan-src/pull/3439)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- CollectedDataNode is VirtualNode (https://github.com/phpstan/phpstan-src/commit/2d613997f5a9298b2446d1a0b2f01a565ed8a457)
### [`v1.12.3`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.3)
[Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.2...1.12.3)
# Improvements π§
- PHPStan Pro: debug corrupted PHAR signature message (https://github.com/phpstan/phpstan-src/commit/9815bbba4535b0605aef5b5cb9dd64a63bc44b1f)
# Bugfixes π
- Revert "Fix phar.yml workflow" (https://github.com/phpstan/phpstan-src/commit/6973519742ab804f57885c099b74971f465c7b24), [#11638](https://redirect.github.com/phpstan/phpstan/issues/11638)
- Refactor `ArrayFilterFunctionReturnTypeReturnTypeExtension` and support first-class callable ([#3329](https://redirect.github.com/phpstan/phpstan-src/pull/3329)), [#11337](https://redirect.github.com/phpstan/phpstan/issues/11337), thanks [@takaram](https://redirect.github.com/takaram)!
- Prevent resolving conditional types in callable param/return types ([#3405](https://redirect.github.com/phpstan/phpstan-src/pull/3405)), [#11472](https://redirect.github.com/phpstan/phpstan/issues/11472), thanks [@rvanvelzen](https://redirect.github.com/rvanvelzen)!
- Fix wrongly convertion of `list` to `array{T}` ([#3412](https://redirect.github.com/phpstan/phpstan-src/pull/3412)), [#11642](https://redirect.github.com/phpstan/phpstan/issues/11642), thanks [@staabm](https://redirect.github.com/staabm)!
- Fix internal error (https://github.com/phpstan/phpstan-src/commit/052f6b130f53ad50f571b81d4d468b0b0026c2fd), [#11649](https://redirect.github.com/phpstan/phpstan/issues/11649)
- Missing typehints should be consistently checked on level 6 (https://github.com/phpstan/phpstan-src/commit/e3e80f6c9c246d13e41188d508f0f4afb631b9af), [#11657](https://redirect.github.com/phpstan/phpstan/issues/11657)
# Function signature fixes π€
- Don't prevent checking for `curl_init()` false returns ([#3409](https://redirect.github.com/phpstan/phpstan-src/pull/3409)), [#11640](https://redirect.github.com/phpstan/phpstan/issues/11640), thanks [@tscni](https://redirect.github.com/tscni)!
- Update phpstorm-stubs and patch ([#3393](https://redirect.github.com/phpstan/phpstan-src/pull/3393)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
# Internals π
- The `COMPOSER_ROOT_VERSION` hack should no longer be necessary ([#3414](https://redirect.github.com/phpstan/phpstan-src/pull/3414))
- Add non regression test ([#3416](https://redirect.github.com/phpstan/phpstan-src/pull/3416)), [#4960](https://redirect.github.com/phpstan/phpstan/issues/4960), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Add non regression test ([#3415](https://redirect.github.com/phpstan/phpstan-src/pull/3415)), [#10499](https://redirect.github.com/phpstan/phpstan/issues/10499), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
### [`v1.12.2`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.2)
[Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.1...1.12.2)
# Improvements π§
- PHP 8.4 - report deprecated implicitly nullable parameter types (https://github.com/phpstan/phpstan-src/commit/9bd027c56330c0f5cc2abab2159549373539583d), [#11413](https://redirect.github.com/phpstan/phpstan/issues/11413)
# Bugfixes π
- Run `@mixin` class reflection extensions after all other class reflection extensions (https://github.com/phpstan/phpstan-src/commit/c889baa9ec60394e9201b2a7054486c66b40fa9b), [#11624](https://redirect.github.com/phpstan/phpstan/issues/11624), [#11342](https://redirect.github.com/phpstan/phpstan/issues/11342), [#10159](https://redirect.github.com/phpstan/phpstan/issues/10159), [https://github.com/larastan/larastan/issues/2032](https://redirect.github.com/larastan/larastan/issues/2032)
- RegexArrayShapeMatcher - Don't optimize alternations with optional groups for tagged unions ([#3395](https://redirect.github.com/phpstan/phpstan-src/pull/3395)), [#11604](https://redirect.github.com/phpstan/phpstan/issues/11604), thanks [@staabm](https://redirect.github.com/staabm)!
- Narrow array on `count()` with `positive-int` ([#3389](https://redirect.github.com/phpstan/phpstan-src/pull/3389)), thanks [@staabm](https://redirect.github.com/staabm)!
- Improve narrowing after string functions ([#3390](https://redirect.github.com/phpstan/phpstan-src/pull/3390)), thanks [@staabm](https://redirect.github.com/staabm)!
- Add `Type::reverseArray()` ([#3344](https://redirect.github.com/phpstan/phpstan-src/pull/3344)), thanks [@herndlm](https://redirect.github.com/herndlm)!
# Function signature fixes π€
- `version_compare()` operator arg can be null ([#3399](https://redirect.github.com/phpstan/phpstan-src/pull/3399)), [#4457](https://redirect.github.com/phpstan/phpstan/issues/4457), thanks [@staabm](https://redirect.github.com/staabm)!
# Internals π
- Regression test ([#3396](https://redirect.github.com/phpstan/phpstan-src/pull/3396)), [#6642](https://redirect.github.com/phpstan/phpstan/issues/6642), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Simplify isFloat checks ([#3397](https://redirect.github.com/phpstan/phpstan-src/pull/3397)), thanks [@staabm](https://redirect.github.com/staabm)!
### [`v1.12.1`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.1)
[Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.0...1.12.1)
# Bleeding edge πͺ
- Check if required file exists ([#3294](https://redirect.github.com/phpstan/phpstan-src/pull/3294)), [#3397](https://redirect.github.com/phpstan/phpstan/issues/3397), thanks [@Bellangelo](https://redirect.github.com/Bellangelo)!
- Check generics `@method` `@template` tags above traits (https://github.com/phpstan/phpstan-src/commit/aadbf62d3ae4517fc7a212b07130bedcef8d13ac)
- Check `@mixin` PHPDoc tag above traits (https://github.com/phpstan/phpstan-src/commit/0d0de946900adf4eb3c799b1b547567536e23147)
*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)*
# Improvements π§
- Allow dot-prefixed config files ([#3354](https://redirect.github.com/phpstan/phpstan-src/pull/3354)), thanks [@sreichel](https://redirect.github.com/sreichel)!
- Respect dist order over dot order ([#3379](https://redirect.github.com/phpstan/phpstan-src/pull/3379)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Update PhpStorm stubs + refactor WithoutSideEffectsRule classes ([#3377](https://redirect.github.com/phpstan/phpstan-src/pull/3377)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- TypeSpecifier: Narrow `(bool) $expr` like `$expr != false` ([#3380](https://redirect.github.com/phpstan/phpstan-src/pull/3380)), [#8881](https://redirect.github.com/phpstan/phpstan/issues/8881), [#7685](https://redirect.github.com/phpstan/phpstan/issues/7685), [#6006](https://redirect.github.com/phpstan/phpstan/issues/6006), [#10528](https://redirect.github.com/phpstan/phpstan/issues/10528), thanks [@staabm](https://redirect.github.com/staabm)!
- TypeSpecifier: Narrow `(string) $expr` like `$expr != false` ([#3387](https://redirect.github.com/phpstan/phpstan-src/pull/3387)), thanks [@staabm](https://redirect.github.com/staabm)!
- TypeSpecifier: Narrow `(int) $expr` like `$expr != false` ([#3384](https://redirect.github.com/phpstan/phpstan-src/pull/3384)), thanks [@staabm](https://redirect.github.com/staabm)!
- TypeSpecifier: Narrow `(float) $expr` like `$expr != false` ([#3391](https://redirect.github.com/phpstan/phpstan-src/pull/3391)), thanks [@staabm](https://redirect.github.com/staabm)!
- Add missing rule to StubValidator (https://github.com/phpstan/phpstan-src/commit/085fcf40fefa63fc3672897276e460a6405206fb)
- Support `@mixin` above traits (https://github.com/phpstan/phpstan-src/commit/f5e2e32932644d61b3745e3b0f2c0910f722a86d)
# Bugfixes π
- Fix `array_filter` with callback optional persistance ([#3366](https://redirect.github.com/phpstan/phpstan-src/pull/3366)), [#11570](https://redirect.github.com/phpstan/phpstan/issues/11570), thanks [@robotomarvin](https://redirect.github.com/robotomarvin)!
- RegexArrayShapeMatcher - infer constant string types in alternations ([#3369](https://redirect.github.com/phpstan/phpstan-src/pull/3369)), [#11222](https://redirect.github.com/phpstan/phpstan/issues/11222), thanks [@staabm](https://redirect.github.com/staabm)!
- RegexArrayShapeMatcher - improve type inference in alternations ([#3375](https://redirect.github.com/phpstan/phpstan-src/pull/3375)), thanks [@staabm](https://redirect.github.com/staabm)!
- Fix error on offset assignment to specialized strings ([#3365](https://redirect.github.com/phpstan/phpstan-src/pull/3365)), [#11572](https://redirect.github.com/phpstan/phpstan/issues/11572), thanks [@staabm](https://redirect.github.com/staabm)!
- Narrow string on `strlen() ==` and `===` comparison with integer range ([#3342](https://redirect.github.com/phpstan/phpstan-src/pull/3342)), [#11548](https://redirect.github.com/phpstan/phpstan/issues/11548), thanks [@staabm](https://redirect.github.com/staabm)!
- Fix `get_debug_type` produces wrong type for anonymous classes with parent ([#3374](https://redirect.github.com/phpstan/phpstan-src/pull/3374)), [#11562](https://redirect.github.com/phpstan/phpstan/issues/11562), thanks [@patrickkusebauch](https://redirect.github.com/patrickkusebauch)!
- Fix preserving list when setting union offset type to a ConstantArrayTypeBuilder ([#3382](https://redirect.github.com/phpstan/phpstan-src/pull/3382)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Fix `preg_replace()` return type ([#3338](https://redirect.github.com/phpstan/phpstan-src/pull/3338)), [#11547](https://redirect.github.com/phpstan/phpstan/issues/11547), thanks [@staabm](https://redirect.github.com/staabm)!
- Detect function variadic-ness anywhere deep in the declaration file ([#3370](https://redirect.github.com/phpstan/phpstan-src/pull/3370)), [#11559](https://redirect.github.com/phpstan/phpstan/issues/11559), [#4753](https://redirect.github.com/phpstan/phpstan/issues/4753), thanks [@staabm](https://redirect.github.com/staabm)!
- Add DateTimeSubMethodThrowTypeExtension ([#3378](https://redirect.github.com/phpstan/phpstan-src/pull/3378)), [#11503](https://redirect.github.com/phpstan/phpstan/issues/11503), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Do not report `static` in PHPDoc tags above traits as an error (https://github.com/phpstan/phpstan-src/commit/777a82a0dc9d6a64a709c30a2e5bdb030b634464), [#11591](https://redirect.github.com/phpstan/phpstan/issues/11591)
- RegexArrayShapeMatcher - Fix alternations containing a `$`-only case ([#3394](https://redirect.github.com/phpstan/phpstan-src/pull/3394)), [#11622](https://redirect.github.com/phpstan/phpstan/issues/11622), thanks [@staabm](https://redirect.github.com/staabm)!
- Do not report missing implementation abstract method from trait when it's implicitly implemented by enum (https://github.com/phpstan/phpstan-src/commit/c50b71fd961e9009419b8fddac835b15696f4ff5), [#11592](https://redirect.github.com/phpstan/phpstan/issues/11592)
- Fix how well conditional types play with pre-existing `@param-out` variable after assignment (https://github.com/phpstan/phpstan-src/commit/5892e8debfbe2f44306e6707c457665784b7dacd), [#11580](https://redirect.github.com/phpstan/phpstan/issues/11580), [#6642](https://redirect.github.com/phpstan/phpstan/issues/6642)
# Internals π
- Debugging function - `PHPStan\debugScope()` (https://github.com/phpstan/phpstan-src/commit/5909fb2dc78cbee46927c2cb23f7491dfef34165)
- Added regression test ([#3368](https://redirect.github.com/phpstan/phpstan-src/pull/3368)), [#7856](https://redirect.github.com/phpstan/phpstan/issues/7856), thanks [@staabm](https://redirect.github.com/staabm)!
- Simplify specifyTypesForConstantBinaryExpression ([#3392](https://redirect.github.com/phpstan/phpstan-src/pull/3392)), thanks [@staabm](https://redirect.github.com/staabm)!
- Refactoring: introduce MethodTagTemplateTypeCheck (https://github.com/phpstan/phpstan-src/commit/47a85bf1453a076bade7a30c94c06c0825abca7c)
- Simplify extensions (https://github.com/phpstan/phpstan-src/commit/c47730f1f97e4dc6ca9f120e2675ca709fc1402c)
- Refactoring - extract MixinCheck (https://github.com/phpstan/phpstan-src/commit/57ccd8c4d4b16c7edec4c2c2de8589956de8284d)
- MixinCheck - prepare for trait rules (https://github.com/phpstan/phpstan-src/commit/ba591420c26b174ae561e26aeed01ccf34da9dee)
### [`v1.12.0`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.0)
[Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.11.11...1.12.0)
[**Read all about PHPStan 1.12 on phpstan.org Β»**](https://phpstan.org/blog/phpstan-1-12-road-to-phpstan-2-0)
# Major new features π
- Precise type for `$matches` from `preg_match` generally available, out of bleeding edge (https://github.com/phpstan/phpstan-src/commit/bd2cec118592f7c66dff5a7ae28882654daf6468)
- PHP 8.4 runtime support
- PHPStan runs on PHP 8.4 without emitting deprecation notices
- Full support for PHP 8.4 including new syntax and rules is coming later, after PHPStan 2.0 release
# Bleeding edge πͺ
- More precise types for bcmath function parameters ([#2217](https://redirect.github.com/phpstan/phpstan-src/pull/2217)), thanks [@Warxcell](https://redirect.github.com/Warxcell)!
- Enforce `@no-named-arguments` (https://github.com/phpstan/phpstan-src/commit/74ba8c23696948f2647d880df72f375346f41010), [#5968](https://redirect.github.com/phpstan/phpstan/issues/5968)
- Check too wide private property type (https://github.com/phpstan/phpstan-src/commit/7453f4f75fae3d635063589467842aae29d88b54)
- Consider implicit throw points when the only explicit one is Throw\_ (https://github.com/phpstan/phpstan-src/commit/22eef6d5ab9a4afafb2305258fea273be6cc06e4)
- Check existing classes in `@param-out` (https://github.com/phpstan/phpstan-src/commit/30c4b9e80f51af8b5f166ba3aae93d8409c9c0ea), [#10260](https://redirect.github.com/phpstan/phpstan/issues/10260)
- Check existing classes in `@param-closure-this` (https://github.com/phpstan/phpstan-src/commit/2fa539a39e06bcc3155b109fd8d246703ceb176d), [#10933](https://redirect.github.com/phpstan/phpstan/issues/10933)
- Check invalid `@param-closure-this` (https://github.com/phpstan/phpstan-src/commit/95c0a5806c65c975201b9d3a464873f75a04c8b8), [#10932](https://redirect.github.com/phpstan/phpstan/issues/10932)
- Check `@param-immediately-invoked-callable` and `@param-later-invoked-callable` (https://github.com/phpstan/phpstan-src/commit/580a6add422f4e34191df9e7a77ba1655e914bda), [#10932](https://redirect.github.com/phpstan/phpstan/issues/10932)
- Check existing classes in `@phpstan-self-out` (https://github.com/phpstan/phpstan-src/commit/6838669976bf20232abde36ecdd52b1770fa50c9)
- Check missing types in `@phpstan-self-out` (https://github.com/phpstan/phpstan-src/commit/892b319f25f04bc1b55c3d0063b607909612fe6d)
- Check missing types in local type aliases (https://github.com/phpstan/phpstan-src/commit/ce7ffaf02d624a7fb9d38f8e5dffc9739f1233fc)
- Check nonexistent classes in local type aliases (https://github.com/phpstan/phpstan-src/commit/2485b2e9c129e789ec3b2d7db81ca30f87c63911)
- Check unresolvable types in local type aliases (https://github.com/phpstan/phpstan-src/commit/5f7d12b2fb2809525ab0e96eeae95093204ea4d3)
- Check generics in local type aliases (https://github.com/phpstan/phpstan-src/commit/5a2d4416d94ab77a2a2e7e1bfaba4c5ed2a13c25)
- Check missing types in `@mixin` (https://github.com/phpstan/phpstan-src/commit/3175c81f26fd5bcb4a161b24e774921870ed2533)
- Check types in `@property` tags (https://github.com/phpstan/phpstan-src/commit/55ea2ae516df22a071ab873fdd6f748a3af0520e), [#10752](https://redirect.github.com/phpstan/phpstan/issues/10752), [#9356](https://redirect.github.com/phpstan/phpstan/issues/9356)
- Check types in `@method` tags (https://github.com/phpstan/phpstan-src/commit/5b7e474680eaf33874b7ed6a227677adcbed9ca5)
- Check `@extends`, `@implements`, `@use` for unresolvable types (https://github.com/phpstan/phpstan-src/commit/2bb528233edb75312614166e282776f279cf2018), [#11552](https://redirect.github.com/phpstan/phpstan/issues/11552)
*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)*
# Improvements π§
- Internal classes made `final`, `@api` classes made `@final` ([#3264](https://redirect.github.com/phpstan/phpstan-src/pull/3264), https://github.com/phpstan/phpstan-src/commit/5baa146510b56c9571b3d85eba71c02d86f683bb)
- Repair `PhpParser\Node\Stmt\Class_::isAnonymous()` ([#3343](https://redirect.github.com/phpstan/phpstan-src/pull/3343)), thanks [@tscni](https://redirect.github.com/tscni)!
- Improve `curl_init()` return type analysis ([#3346](https://redirect.github.com/phpstan/phpstan-src/pull/3346)), thanks [@tscni](https://redirect.github.com/tscni)!
- StubValidator - added missing rules (https://github.com/phpstan/phpstan-src/commit/7fc5ab8dfb3be8cc0c1daff7c17b6c6d98d8ca7a)
- Do not allow `@phpstan-self-out` above static method (https://github.com/phpstan/phpstan-src/commit/0dfd8217699fc1c4796bcafbf2f6e04137938365)
- Check unresolvable types in `@phpstan-self-out` (https://github.com/phpstan/phpstan-src/commit/e182c0662df24e57c81b1d49e22963cad5ff5d13)
- Check generics in `@phpstan-self-out` (https://github.com/phpstan/phpstan-src/commit/9ebc315589ba2086279dd4c404ef77a33f8b43a7)
- ConstExprNodeResolver - support ConstFetchNode for class constants (https://github.com/phpstan/phpstan-src/commit/3e51899dd7ed0e2785846f8ec820b4cd8214b993) - allowed in default parameter values in `@method`
# Bugfixes π
- PHPStanDiagnoseExtension - skip showing config files in "Included configs from Composer packages" if already present in the "Extension installer" section (https://github.com/phpstan/phpstan-src/commit/6c4477c9fcc2d62579cb1e353ca902b4b9ebb888)
- Support multiple anonymous class definitions on the same line ([#3328](https://redirect.github.com/phpstan/phpstan-src/pull/3328)), [#5597](https://redirect.github.com/phpstan/phpstan/issues/5597), [#11511](https://redirect.github.com/phpstan/phpstan/issues/11511), thanks [@tscni](https://redirect.github.com/tscni)!
- Fix ConstantArrayType not accepting NeverType ([#3327](https://redirect.github.com/phpstan/phpstan-src/pull/3327)), [#11517](https://redirect.github.com/phpstan/phpstan/issues/11517), thanks [@tscni](https://redirect.github.com/tscni)!
- Narrow to non-falsy-string from `strlen()` on integer range ([#3337](https://redirect.github.com/phpstan/phpstan-src/pull/3337)), thanks [@staabm](https://redirect.github.com/staabm)!
- Narrow arrays in union based on `count()` with integer range ([#3335](https://redirect.github.com/phpstan/phpstan-src/pull/3335)), thanks [@staabm](https://redirect.github.com/staabm)!
- Fix description escaping in UsedTraitsRule (https://github.com/phpstan/phpstan-src/commit/4ffbb3b126d3c98fad4ad0906c76d24febdb89ed)
# Internals π
- Cleanup TypeSpecifier ([#3340](https://redirect.github.com/phpstan/phpstan-src/pull/3340)), thanks [@staabm](https://redirect.github.com/staabm)!
- Refactor ReplaceFunctionsDynamicReturnTypeExtension ([#3339](https://redirect.github.com/phpstan/phpstan-src/pull/3339)), thanks [@staabm](https://redirect.github.com/staabm)!
- BetterReflectionSourceLocator - playground mode (https://github.com/phpstan/phpstan-src/commit/7d1bde44afc0c0f7e3b29f2d75a7c33d5e6a56ec)
- Internal PHPStan rule - class must be abstract or final (https://github.com/phpstan/phpstan-src/commit/d631120bea6af099cdcc85e3e12dc9f26bf6f1f5)
- Downgrade PHP files in build/PHPStan (https://github.com/phpstan/phpstan-src/commit/fe503cad77b684f845a932644007c50684161b8d)
- ExtendedPropertyReflection (https://github.com/phpstan/phpstan-src/commit/d65138a11f0654b710a27b4b563bff2ccf0b2c1b)
- Replace `highlight_string()` stub with a return type extension ([#3350](https://redirect.github.com/phpstan/phpstan-src/pull/3350))
- Issue bot - test PHP 8.4 ([#3358](https://redirect.github.com/phpstan/phpstan-src/pull/3358))
### [`v1.11.11`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.11.11)
[Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.11.10...1.11.11)
# Improvements π§
- Narrow arrays in union based on count() with smaller/greater operator ([#3324](https://redirect.github.com/phpstan/phpstan-src/pull/3324)), [#11480](https://redirect.github.com/phpstan/phpstan/issues/11480), thanks [@staabm](https://redirect.github.com/staabm)!
- PHPStanDiagnoseExtension - show Composer packages with included config files (https://github.com/phpstan/phpstan-src/commit/58d202fddc5597a1fa274ca3b64c352717818c4f)
# Bugfixes π
- RegexArrayShapeMatcher - optional non-last groups can be empty-string ([#3306](https://redirect.github.com/phpstan/phpstan-src/pull/3306)), [#11479](https://redirect.github.com/phpstan/phpstan/issues/11479), thanks [@staabm](https://redirect.github.com/staabm)!
- RegexArrayShapeMatcher - fix capturing item-array-shapes for preg_match_all ([#3307](https://redirect.github.com/phpstan/phpstan-src/pull/3307)), thanks [@staabm](https://redirect.github.com/staabm)!
- RegexArrayShapeMatcher - Fix shape of single top level alternations ([#3299](https://redirect.github.com/phpstan/phpstan-src/pull/3299)), [#11462](https://redirect.github.com/phpstan/phpstan/issues/11462), thanks [@staabm](https://redirect.github.com/staabm)!
- RegexArrayShapeMatcher - Fix matching literal "-" in character classes ([#3314](https://redirect.github.com/phpstan/phpstan-src/pull/3314)), [#11490](https://redirect.github.com/phpstan/phpstan/issues/11490), thanks [@staabm](https://redirect.github.com/staabm)!
- Improve sprintf support ([#3310](https://redirect.github.com/phpstan/phpstan-src/pull/3310)), [#11491](https://redirect.github.com/phpstan/phpstan/issues/11491), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Handle union and mixed in plus operation ([#3320](https://redirect.github.com/phpstan/phpstan-src/pull/3320)), [#3759](https://redirect.github.com/phpstan/phpstan/issues/3759), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Fix union with float should accept integer range ([#3318](https://redirect.github.com/phpstan/phpstan-src/pull/3318)), [#10248](https://redirect.github.com/phpstan/phpstan/issues/10248), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Fix array_intersect_key ([#3317](https://redirect.github.com/phpstan/phpstan-src/pull/3317)), [#10561](https://redirect.github.com/phpstan/phpstan/issues/10561), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Improve non strict `in_array()` ([#3319](https://redirect.github.com/phpstan/phpstan-src/pull/3319)), [#9436](https://redirect.github.com/phpstan/phpstan/issues/9436), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- String offset access leads to non-empty-string (single character) (https://github.com/phpstan/phpstan-src/commit/9439bba42047ab9561a091292568d7adf58e42ce), [#11506](https://redirect.github.com/phpstan/phpstan/issues/11506)
- Fix `AccessoryLiteralStringType::setOffsetValueType()` (https://github.com/phpstan/phpstan-src/commit/93c5226cb5711c8b1b846fcfe6d5ef2586d2b162)
- Fix `AccessoryNonFalsyStringType::setOffsetValueType()` (https://github.com/phpstan/phpstan-src/commit/c28c9362376286044b37755bedf49ab2228801dc)
- Improve IntDivThrowTypeExtension to support integer ranges ([#3325](https://redirect.github.com/phpstan/phpstan-src/pull/3325)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)!
- Fix array intersection between HasOffsetType and HasOffsetValueType (https://github.com/phpstan/phpstan-src/commit/07d64058830765dbb3bf194cffdf66c98db20a38), [#11518](https://redirect.github.com/phpstan/phpstan/issues/11518)
- Fix item type in list to constant array conversion with `count()` ([#3309](
Configuration
π Schedule: Branch creation - At any time (no schedule defined), Automerge - 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, check this box
This PR contains the following updates:
1.9.14
->1.12.10
Release Notes
phpstan/phpstan (phpstan/phpstan)
### [`v1.12.10`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.10) [Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.9...1.12.10) # Bugfixes π - ClassReflection: resolve missing template type to its default (if set) rather than bound ([#3623](https://redirect.github.com/phpstan/phpstan-src/pull/3623)), [#11899](https://redirect.github.com/phpstan/phpstan/issues/11899), thanks [@jiripudil](https://redirect.github.com/jiripudil)! - Fix `for` endless loop detection ([#3622](https://redirect.github.com/phpstan/phpstan-src/pull/3622)), [#11992](https://redirect.github.com/phpstan/phpstan/issues/11992), thanks [@herndlm](https://redirect.github.com/herndlm)! - Fix tagging Docker image (https://github.com/phpstan/phpstan/commit/379b9a230ededc558195620de0f31d251bbe6166) ### [`v1.12.9`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.9) [Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.8...1.12.9) # Improvements π§ - Support `@readonly` PHPDoc on the class as alternative to `@immutable` ([#3523](https://redirect.github.com/phpstan/phpstan-src/pull/3523)), [#11775](https://redirect.github.com/phpstan/phpstan/issues/11775), thanks [@herndlm](https://redirect.github.com/herndlm)! # Bugfixes π - Fix too early lowercase-string inference ([#3585](https://redirect.github.com/phpstan/phpstan-src/pull/3585)), [#11852](https://redirect.github.com/phpstan/phpstan/issues/11852), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Support `for` endless loops ([#3573](https://redirect.github.com/phpstan/phpstan-src/pull/3573)), [#6807](https://redirect.github.com/phpstan/phpstan/issues/6807), [#8463](https://redirect.github.com/phpstan/phpstan/issues/8463), [#9374](https://redirect.github.com/phpstan/phpstan/issues/9374), thanks [@herndlm](https://redirect.github.com/herndlm)! - More precise types for `preg_match` greater than `0` ([#3612](https://redirect.github.com/phpstan/phpstan-src/pull/3612)), [#11293](https://redirect.github.com/phpstan/phpstan/issues/11293), thanks [@staabm](https://redirect.github.com/staabm)! - Too-wide return type - do not report void in PHPDoc union type (https://github.com/phpstan/phpstan-src/commit/5f0b1ccfa47060c209ead7116005214183c0e56f), [#11980](https://redirect.github.com/phpstan/phpstan/issues/11980) - Too-wide return type - allow `void` return type in a union when the returned expr is originally `void` (https://github.com/phpstan/phpstan-src/commit/80c1df2d73210227776db5443dbc28c2d71fa289), [#11980](https://redirect.github.com/phpstan/phpstan/issues/11980) - RichParser - fix `@phpstan-ignore` with trait in the same file (https://github.com/phpstan/phpstan-src/commit/381c1370e7ce3b1c2d8de6c5b30913908c362eb8), [#11981](https://redirect.github.com/phpstan/phpstan/issues/11981) # Internals π - Result DTOs - make reasons unique (https://github.com/phpstan/phpstan-src/commit/ccfb4ab7a19151925b9434e3245892006b3d9dcd) ### [`v1.12.8`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.8) [Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.7...1.12.8) # Improvements π§ - OffsetAccessValueAssignmentRule optimization for huge arrays (https://github.com/phpstan/phpstan-src/commit/a07996a9cad15c0c6e6e8fd57338236734a5c0dd) - Fix performance issue with big appended arrays (https://github.com/phpstan/phpstan-src/commit/537c12c0c3f14371ceaf59051fc5445339857a97), [#11913](https://redirect.github.com/phpstan/phpstan/issues/11913) - processAssignVar optimization for arrays (https://github.com/phpstan/phpstan-src/commit/16f63b3a48105ddce37d816e157f004fe9164cf9), - Another micro optimization (https://github.com/phpstan/phpstan-src/commit/c04555b9387dea448a5649348546e9629063dda8) - Optimization of huge unions of oversized arrays (https://github.com/phpstan/phpstan-src/commit/4dfbe16ed9cdf0808027f3bcbdb26980ec39df3f) - Avoid new HasOffsetValueType being intersected with oversized array (https://github.com/phpstan/phpstan-src/commit/deef91983766dd61c18d4f9d819ffc94fb701cd5) - Add ArrayFindFunctionReturnTypeExtension (PHP 8.4) ([#3518](https://redirect.github.com/phpstan/phpstan-src/pull/3518), [#3608](https://redirect.github.com/phpstan/phpstan-src/pull/3608)), thanks [@zonuexe](https://redirect.github.com/zonuexe)! # Bugfixes π - Do not transform `$this` in return type even in final classes ([#3599](https://redirect.github.com/phpstan/phpstan-src/pull/3599)), [#11857](https://redirect.github.com/phpstan/phpstan/issues/11857), thanks [@calebdw](https://redirect.github.com/calebdw)! - Exclude `E_DEPRECATED` from error_reporting (https://github.com/phpstan/phpstan-src/commit/277e34b23a43b7ff0cca0c141789d0a786690e9b), [#11937](https://redirect.github.com/phpstan/phpstan/issues/11937) - More precise types in immediately invoked callables ([#3593](https://redirect.github.com/phpstan/phpstan-src/pull/3593), [#3602](https://redirect.github.com/phpstan/phpstan-src/pull/3602)), [#11561](https://redirect.github.com/phpstan/phpstan/issues/11561), [#11945](https://redirect.github.com/phpstan/phpstan/issues/11945), thanks [@staabm](https://redirect.github.com/staabm)! - Only use last for condition to filter scope ([#3578](https://redirect.github.com/phpstan/phpstan-src/pull/3578)), thanks [@herndlm](https://redirect.github.com/herndlm)! - Preserve correct UnionType subclass in `filterTypes()` ([#3535](https://redirect.github.com/phpstan/phpstan-src/pull/3535)), [#11663](https://redirect.github.com/phpstan/phpstan/issues/11663), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! # Function signature fixes π€ - `Imagick::writeImage(s)File` supporting `format` parameter ([#3588](https://redirect.github.com/phpstan/phpstan-src/pull/3588)), thanks [@kingjia90](https://redirect.github.com/kingjia90)! # Internals π - Remove unnecessary `instanceof ConstantBooleanType` in loop analysis ([#3577](https://redirect.github.com/phpstan/phpstan-src/pull/3577)), [#11913](https://redirect.github.com/phpstan/phpstan/issues/11913), thanks [@herndlm](https://redirect.github.com/herndlm)! - NodeScopeResolver - refactoring before optimization (https://github.com/phpstan/phpstan-src/commit/1a0099dc61674ff1eb0ef8d68c90011f2206a64b) - Add `@api` to TypeExpr ([#3601](https://redirect.github.com/phpstan/phpstan-src/pull/3601)), thanks [@ruudk](https://redirect.github.com/ruudk)! - Split ArrayFilterFunctionReturnTypeExtension to Helper ([#3606](https://redirect.github.com/phpstan/phpstan-src/pull/3606)), thanks [@zonuexe](https://redirect.github.com/zonuexe)! - Introduce `UnionType::filterTypes` ([#3607](https://redirect.github.com/phpstan/phpstan-src/pull/3607)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! ### [`v1.12.7`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.7) [Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.6...1.12.7) # Major new features π - **Implement template default types** ([#3457](https://redirect.github.com/phpstan/phpstan-src/pull/3457)), [#4801](https://redirect.github.com/phpstan/phpstan/issues/4801), thanks [@jiripudil](https://redirect.github.com/jiripudil)! - See https://x.com/OndrejMirtes/status/1843920480342057154 # Improvements π§ - Move result cache output from debug (`-vvv`) to very verbose (`-vv`) mode ([#3345](https://redirect.github.com/phpstan/phpstan-src/pull/3345)), thanks [@janedbal](https://redirect.github.com/janedbal)! - Support for `non-empty-array` and `non-empty-list` array shape kind (https://github.com/phpstan/phpstan-src/commit/107a7e38e2173d8b8b4f18e5d592fc8ead02b96a) - Improve lowercase string verbosity level ([#3567](https://redirect.github.com/phpstan/phpstan-src/pull/3567)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Show TypeResult reasons in StrictComparisonOfDifferentTypesRule (https://github.com/phpstan/phpstan-src/commit/34bacd74410573cf79754348231849b474b7312e) - Decorate reasons when comparing ConstantArrayType (https://github.com/phpstan/phpstan-src/commit/dc5d8f4d3eef18b1d80b8ffb3a1adfe8de6d7268), [#11799](https://redirect.github.com/phpstan/phpstan/issues/11799), [#10421](https://redirect.github.com/phpstan/phpstan/issues/10421) # Bugfixes π - Fix nextAutoIndexes in array coming from ArrayCombineFunctionReturnTypeExtension (https://github.com/phpstan/phpstan-src/commit/c4ba43462cecb03ef57805ffd683f77d57b79a4a), [#11819](https://redirect.github.com/phpstan/phpstan/issues/11819) - Fix return type of `array_reverse()` with optional keys ([#3406](https://redirect.github.com/phpstan/phpstan-src/pull/3406)), [#11549](https://redirect.github.com/phpstan/phpstan/issues/11549), thanks [@herndlm](https://redirect.github.com/herndlm)! - Try to quit the child process only after internal errors were accounted for (https://github.com/phpstan/phpstan-src/commit/dcd69eba14ed57b32c2f1b759cd8289772f364ac), [#11826](https://redirect.github.com/phpstan/phpstan/issues/11826) - react/http PHP 8.4 patch (https://github.com/phpstan/phpstan-src/commit/40e461d2e8dff171cdf588e380eb20e782e94eb1) # Function signature fixes π€ - functionMap: more precise `get_defined_vars()` ([#3546](https://redirect.github.com/phpstan/phpstan-src/pull/3546)), thanks [@janedbal](https://redirect.github.com/janedbal)! - Reflection `getAttributes` returns `list` ([#3548](https://redirect.github.com/phpstan/phpstan-src/pull/3548)), thanks [@ManuelHu](https://redirect.github.com/ManuelHu)! - More precise md5/sha1 return type ([#3541](https://redirect.github.com/phpstan/phpstan-src/pull/3541)), thanks [@staabm](https://redirect.github.com/staabm)! - Improve return type of token_name() and PhpToken::getTokenName() ([#3558](https://redirect.github.com/phpstan/phpstan-src/pull/3558)), [#11808](https://redirect.github.com/phpstan/phpstan/issues/11808), thanks [@zonuexe](https://redirect.github.com/zonuexe)! # Internals π - Fix typo (https://github.com/phpstan/phpstan-src/commit/5b43d5004648ded12d5a635db9bb82c56efc2c11) - Introduce isSuperTypeOfWithReason ([#3538](https://redirect.github.com/phpstan/phpstan-src/pull/3538)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Add function `PHPStan\dumpPhpDocType()` ([#3559](https://redirect.github.com/phpstan/phpstan-src/pull/3559)), [#11561](https://redirect.github.com/phpstan/phpstan/issues/11561), thanks [@zonuexe](https://redirect.github.com/zonuexe)! - Introduce TypeResult (https://github.com/phpstan/phpstan-src/commit/a815d575dc10616e510713e01627369b10980d31) ### [`v1.12.6`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.6) [Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.5...1.12.6) # Bleeding edge πͺ - Added absent type checks about `@phpstan-assert` PHPDoc tags (https://github.com/phpstan/phpstan-src/commit/ca0a7e9955397eef453b38c94ac67ba6faf7356b), [#11780](https://redirect.github.com/phpstan/phpstan/issues/11780) *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)* # Improvements π§ - Update nikic/php-parser to v4.19.4 (https://github.com/phpstan/phpstan-src/commit/0b9ce98cfad4a1f7e98e85c2cbd813025dbafa77) - Process `ClassConstFetch::$class` when it's a Name node (https://github.com/phpstan/phpstan-src/commit/712c33e02ea2d95542cd333a493e276b22399773) - Process `ClassConstFetch::$name` (https://github.com/phpstan/phpstan-src/commit/b38c852c7c9e1e49baa0dc8700dd13df531d0938) - Fix unused private property is not sometimes detected ([#3539](https://redirect.github.com/phpstan/phpstan-src/pull/3539)), [#11802](https://redirect.github.com/phpstan/phpstan/issues/11802), thanks [@staabm](https://redirect.github.com/staabm)! # Bugfixes π - Fixes for `lowercase-string` - Keep lowercase when trim ([#3491](https://redirect.github.com/phpstan/phpstan-src/pull/3491)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Add support for str_repeat and str_pad for lowercase string ([#3490](https://redirect.github.com/phpstan/phpstan-src/pull/3490)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Update ReplaceFunctionsDynamicReturnTypeExtension for lowercase-string ([#3489](https://redirect.github.com/phpstan/phpstan-src/pull/3489)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Update parse_str for lowercase string ([#3492](https://redirect.github.com/phpstan/phpstan-src/pull/3492)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - More precise `IntegerRangeType::toString()` ([#3475](https://redirect.github.com/phpstan/phpstan-src/pull/3475)), thanks [@staabm](https://redirect.github.com/staabm)! - Add support for lowercase-string on parse_url() ([#3493](https://redirect.github.com/phpstan/phpstan-src/pull/3493)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Improve Vsprintf inference ([#3496](https://redirect.github.com/phpstan/phpstan-src/pull/3496), [#3501](https://redirect.github.com/phpstan/phpstan-src/pull/3501)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Offset access on lowercase-string is lowercase-string ([#3502](https://redirect.github.com/phpstan/phpstan-src/pull/3502)), thanks [@staabm](https://redirect.github.com/staabm)! - IntegerType::toString() is lowercase ([#3510](https://redirect.github.com/phpstan/phpstan-src/pull/3510)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Handle lowercase string in sprintf ([#3498](https://redirect.github.com/phpstan/phpstan-src/pull/3498)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Update composer/pcre (https://github.com/phpstan/phpstan-src/commit/3cdac94e67bf8e508b150e9ee0e3075b3105ad19), [#11786](https://redirect.github.com/phpstan/phpstan/issues/11786) - Fix a few regex class parsing usecases ([#3488](https://redirect.github.com/phpstan/phpstan-src/pull/3488)), thanks [@mvorisek](https://redirect.github.com/mvorisek)! - Fix preg_match_all with PREG_SET_ORDER does not see capture group as optional ([#3506](https://redirect.github.com/phpstan/phpstan-src/pull/3506)), [#11661](https://redirect.github.com/phpstan/phpstan/issues/11661), thanks [@staabm](https://redirect.github.com/staabm)! - Fix false-positive with preg_match(): Strict comparison using === between '' and non-falsy-stringβ¦ween '' and non-falsy-string ([#3509](https://redirect.github.com/phpstan/phpstan-src/pull/3509)), [#11744](https://redirect.github.com/phpstan/phpstan/issues/11744), thanks [@staabm](https://redirect.github.com/staabm)! # Function signature fixes π€ - functionMap: a bit more precise get_defined_constants ([#3537](https://redirect.github.com/phpstan/phpstan-src/pull/3537)), thanks [@janedbal](https://redirect.github.com/janedbal)! - token_name() returns non-empty-string ([#3540](https://redirect.github.com/phpstan/phpstan-src/pull/3540)), thanks [@staabm](https://redirect.github.com/staabm)! - curl_multi_getcontent() can return null ([#3527](https://redirect.github.com/phpstan/phpstan-src/pull/3527)), thanks [@staabm](https://redirect.github.com/staabm)! - Update SplFileInfo::getPathInfo return type ([#3487](https://redirect.github.com/phpstan/phpstan-src/pull/3487)), thanks [@DannyvdSluijs](https://redirect.github.com/DannyvdSluijs)! - Update return type of `spl_autoload_functions` on PHP8.0+ ([#2810](https://redirect.github.com/phpstan/phpstan-src/pull/2810)), thanks [@ManuelHu](https://redirect.github.com/ManuelHu)! # Internals π - Fix missing ltrim in regex parse ([#3495](https://redirect.github.com/phpstan/phpstan-src/pull/3495)), thanks [@mvorisek](https://redirect.github.com/mvorisek)! - Un-deprecate ConstantTypeHelper (https://github.com/phpstan/phpstan-src/commit/3a83f6bec7eb4724d4f1b6c2dedbfe46c0b1112a) - Introduce `Scope::getMaybeDefinedVariables()` ([#3521](https://redirect.github.com/phpstan/phpstan-src/pull/3521)), [#11772](https://redirect.github.com/phpstan/phpstan/issues/11772), thanks [@ruudk](https://redirect.github.com/ruudk)! - TypeInferenceTestCase: allow asserting array offset certainty ([#3503](https://redirect.github.com/phpstan/phpstan-src/pull/3503)), thanks [@ruudk](https://redirect.github.com/ruudk)! - Simplify preserveKeys TrinaryLogic creation in two extensions ([#3516](https://redirect.github.com/phpstan/phpstan-src/pull/3516)), thanks [@herndlm](https://redirect.github.com/herndlm)! - Add `Type::sliceArray()` ([#3514](https://redirect.github.com/phpstan/phpstan/issues/3514)) ([#3514](https://redirect.github.com/phpstan/phpstan-src/pull/3514)), thanks [@herndlm](https://redirect.github.com/herndlm)! - Set normalized in BenevolentUnionType ([#3522](https://redirect.github.com/phpstan/phpstan-src/pull/3522)), thanks [@herndlm](https://redirect.github.com/herndlm)! - Refactor RegexGroupParser for more immutability and less pass-by-ref ([#3508](https://redirect.github.com/phpstan/phpstan-src/pull/3508)), thanks [@staabm](https://redirect.github.com/staabm)! ### [`v1.12.5`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.5) [Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.4...1.12.5) # Improvements π§ - Deprecate `ParametersAcceptorSelector::selectSingle()` (https://github.com/phpstan/phpstan-src/commit/23c53a2210b715f672ad3087dd476faf34bdec6e) - See: https://github.com/phpstan/phpstan/blob/2.0.x/UPGRADING.md#removed-deprecated-parametersacceptorselectorselectsingle - Introduce `lowercase-string` ([#3438](https://redirect.github.com/phpstan/phpstan-src/pull/3438)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - More precise mixed-type subtraction in `toInteger()` ([#3434](https://redirect.github.com/phpstan/phpstan-src/pull/3434)), thanks [@staabm](https://redirect.github.com/staabm)! - More precise `MixedType::toString()` with subtracted type ([#3420](https://redirect.github.com/phpstan/phpstan-src/pull/3420)), thanks [@staabm](https://redirect.github.com/staabm)! - More precise `MixedType::toBoolean()` with subtracted type ([#3471](https://redirect.github.com/phpstan/phpstan-src/pull/3471)), thanks [@staabm](https://redirect.github.com/staabm)! - Improve loose comparison for integer ranges ([#3465](https://redirect.github.com/phpstan/phpstan-src/pull/3465)), [#11694](https://redirect.github.com/phpstan/phpstan/issues/11694), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Truthy `isset($arr[$k])` should narrow `$k` ([#3453](https://redirect.github.com/phpstan/phpstan-src/pull/3453)), [#11716](https://redirect.github.com/phpstan/phpstan/issues/11716), [#8559](https://redirect.github.com/phpstan/phpstan/issues/8559), thanks [@staabm](https://redirect.github.com/staabm)! - `isset()` narrows string-key in int-keyed-array to numeric-string ([#3472](https://redirect.github.com/phpstan/phpstan-src/pull/3472)), thanks [@staabm](https://redirect.github.com/staabm)! # Bugfixes π - Add generic types for array_values ([#3456](https://redirect.github.com/phpstan/phpstan-src/pull/3456)), thanks [@schlndh](https://redirect.github.com/schlndh)! - Support IntegerRangeType in ConstantStringType offset-value-type handling ([#3462](https://redirect.github.com/phpstan/phpstan-src/pull/3462)), thanks [@staabm](https://redirect.github.com/staabm)! - Fix bug with oversized array ([#3461](https://redirect.github.com/phpstan/phpstan-src/pull/3461)), [#11703](https://redirect.github.com/phpstan/phpstan/issues/11703), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Fix ErrorType after ArrayDimFetch ([#3460](https://redirect.github.com/phpstan/phpstan-src/pull/3460)), thanks [@staabm](https://redirect.github.com/staabm)! - Implement ClosureType::getReferencedTemplateTypes() ([#3458](https://redirect.github.com/phpstan/phpstan-src/pull/3458)), [#10609](https://redirect.github.com/phpstan/phpstan/issues/10609), thanks [@jiripudil](https://redirect.github.com/jiripudil)! - Fix substracted union type describe ([#3360](https://redirect.github.com/phpstan/phpstan-src/pull/3360)), [#10227](https://redirect.github.com/phpstan/phpstan/issues/10227), thanks [@mvorisek](https://redirect.github.com/mvorisek)! - Fix including relative path (https://github.com/phpstan/phpstan-src/commit/098fb9416779240fab9b2dea1ee730da69668014), [#11738](https://redirect.github.com/phpstan/phpstan/issues/11738) - Fix `sprintf()` inference for constant values with format-width in pattern ([#3474](https://redirect.github.com/phpstan/phpstan-src/pull/3474)), thanks [@staabm](https://redirect.github.com/staabm)! - Drop wrong float comparison for `filter_var()` ([#2656](https://redirect.github.com/phpstan/phpstan-src/pull/2656)), thanks [@mvorisek](https://redirect.github.com/mvorisek)! # Function signature fixes π€ - Change `iptcparse` return type ([#3483](https://redirect.github.com/phpstan/phpstan-src/pull/3483)), thanks [@ManuelHu](https://redirect.github.com/ManuelHu)! # Internals π - More specific return type for methods used to analyse currently entered function or method (https://github.com/phpstan/phpstan-src/commit/0e2587fae6e65be54ecbd47d33277d3f529d44d1) - PhpFunctionFromParserNodeReflection becomes ParametersAcceptorWithPhpDocs (https://github.com/phpstan/phpstan-src/commit/1bea5c79d53e06f6cdd481decba73b504fb4bec0) - Use methods directly on PhpFunctionFromParserNodeReflection instead of `selectSingle()` when analysing function body in rules (https://github.com/phpstan/phpstan-src/commit/41916ba39d429d096d5234acedcfe75f22025785) - Use methods directly on PhpFunctionFromParserNodeReflection instead of `selectSingle()` in MutatingScope (https://github.com/phpstan/phpstan-src/commit/865c618f82030cbc2e915c6da6bd424bc9b8aa41) - Use `ParametersAcceptorSelector::selectFromArgs()` instead of `selectSingle()` wherever possible (https://github.com/phpstan/phpstan-src/commit/e283d3a6df7df502f3c3e70bc086dd2018dc965b) - Use PhpFunctionFromParserNodeReflection as ParametersAcceptor in DependencyResolver (https://github.com/phpstan/phpstan-src/commit/7e216a274f00bf0a77a72628c884fdd4cb6c24c6) - Use methods directly on PhpFunctionFromParserNodeReflection instead of `selectSingle()` in ParametersAcceptorSelector (https://github.com/phpstan/phpstan-src/commit/1322aaf1d029c8db49c4c72742cb3d46f56be132) - Introduce `@internal` `getOnlyVariant()` method on FunctionReflection/ExtendedMethodReflection to use instead of `selectSingle()` (https://github.com/phpstan/phpstan-src/commit/714877be8cafc1ba08610929e4dcb0d43273cc8d) - Add `Type::chunkArray()` ([#3408](https://redirect.github.com/phpstan/phpstan-src/pull/3408)), thanks [@herndlm](https://redirect.github.com/herndlm)! - Add more mixed-type bool subtraction tests ([#3421](https://redirect.github.com/phpstan/phpstan-src/pull/3421)), thanks [@staabm](https://redirect.github.com/staabm)! - Made IssetExpr part of BC promise (https://github.com/phpstan/phpstan-src/commit/5677025877c6a8aef51b500cd461e8dbda6dab8c) - Refactor RegexGroupParser for more immutability and less pass-by-ref ([#3479](https://redirect.github.com/phpstan/phpstan-src/pull/3479)), thanks [@staabm](https://redirect.github.com/staabm)! ### [`v1.12.4`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.4) [Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.3...1.12.4) # Improvements π§ - Special internal error message for Larastan & Laravel (https://github.com/phpstan/phpstan-src/commit/475a18ce8e0e14e340d7a0939906fffa6dd28e8d), [#11641](https://redirect.github.com/phpstan/phpstan/issues/11641) - Do not truncate offset key in error tip message ([#3437](https://redirect.github.com/phpstan/phpstan-src/pull/3437)), thanks [@ruudk](https://redirect.github.com/ruudk)! - Errors with `argument.named` are ignorable now (https://github.com/phpstan/phpstan-src/commit/193b4f518d53eb3648b09ff131f83979067fec59) - Normalize path in TypeInferenceTestCase ([#3449](https://redirect.github.com/phpstan/phpstan-src/pull/3449)), thanks [@staabm](https://redirect.github.com/staabm)! - Fix duplicate paths in `composerAutoloaderProjectPaths` on Windows ([#3451](https://redirect.github.com/phpstan/phpstan-src/pull/3451)), thanks [@staabm](https://redirect.github.com/staabm)! - Update nikic/php-parser to 4.19.2 (https://github.com/phpstan/phpstan-src/commit/05630e67fa3809191253e660765573263daab2b9) - Allow toggling `treatPhpDocTypesAsCertain` tip ([#3452](https://redirect.github.com/phpstan/phpstan-src/pull/3452)), [#11689](https://redirect.github.com/phpstan/phpstan/issues/11689), thanks [@ruudk](https://redirect.github.com/ruudk)! # Bugfixes π - Fix conditional types in `array_map()` return value ([#3425](https://redirect.github.com/phpstan/phpstan-src/pull/3425)), [#10715](https://redirect.github.com/phpstan/phpstan/issues/10715), [#11056](https://redirect.github.com/phpstan/phpstan/issues/11056), [#10685](https://redirect.github.com/phpstan/phpstan/issues/10685), thanks [@rvanvelzen](https://redirect.github.com/rvanvelzen)! - Fix false positive when extending SplObjectStorage on PHP < 8.4 by updating BetterReflection ([https://github.com/Roave/BetterReflection/pull/1448](https://redirect.github.com/Roave/BetterReflection/pull/1448), https://github.com/phpstan/phpstan-src/commit/fd25c2779ca7fd4decee7038282ab9743b16d167), [#11665](https://redirect.github.com/phpstan/phpstan/issues/11665), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - Prevent warning in `range()` on PHP 7.x ([#3424](https://redirect.github.com/phpstan/phpstan-src/pull/3424)), thanks [@staabm](https://redirect.github.com/staabm)! - Process expression assignments other than Variable in by-ref parameters (https://github.com/phpstan/phpstan-src/commit/d3a2a92fcd612bf42bbfd19cd3a5625481ff7522), [#11667](https://redirect.github.com/phpstan/phpstan/issues/11667), [#8781](https://redirect.github.com/phpstan/phpstan/issues/8781) - Allow nonexistent other-than-Variable expressions in by-ref parameters (https://github.com/phpstan/phpstan-src/commit/00d2caf39514380610899b0a305413f60c1c5830), [#11617](https://redirect.github.com/phpstan/phpstan/issues/11617), [#5077](https://redirect.github.com/phpstan/phpstan/issues/5077), [#9361](https://redirect.github.com/phpstan/phpstan/issues/9361), [#7251](https://redirect.github.com/phpstan/phpstan/issues/7251), [#2313](https://redirect.github.com/phpstan/phpstan/issues/2313), [#11655](https://redirect.github.com/phpstan/phpstan/issues/11655), [#2634](https://redirect.github.com/phpstan/phpstan/issues/2634) - Fix false positive when type casting in If\_ statement ([#3431](https://redirect.github.com/phpstan/phpstan-src/pull/3431)), [#11674](https://redirect.github.com/phpstan/phpstan/issues/11674), thanks [@staabm](https://redirect.github.com/staabm)! - Simplify abs return type ([#3433](https://redirect.github.com/phpstan/phpstan-src/pull/3433)), [#9224](https://redirect.github.com/phpstan/phpstan/issues/9224), thanks [@rvanvelzen](https://redirect.github.com/rvanvelzen)! - Fix late static binding calls ([#3361](https://redirect.github.com/phpstan/phpstan-src/pull/3361)), [#10469](https://redirect.github.com/phpstan/phpstan/issues/10469), thanks [@mvorisek](https://redirect.github.com/mvorisek)! - Fix string types sorting ([#3441](https://redirect.github.com/phpstan/phpstan-src/pull/3441)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - RegexArrayShapeMatcher - Fix matching literal dot character ([#3444](https://redirect.github.com/phpstan/phpstan-src/pull/3444)), [#11699](https://redirect.github.com/phpstan/phpstan/issues/11699), thanks [@staabm](https://redirect.github.com/staabm)! - Fix infer new templated type from initial assign into static property ([#3364](https://redirect.github.com/phpstan/phpstan-src/pull/3364)), [#5551](https://redirect.github.com/phpstan/phpstan/issues/5551), thanks [@mvorisek](https://redirect.github.com/mvorisek)! - `range()` with float step should return an array of floats ([#3447](https://redirect.github.com/phpstan/phpstan-src/pull/3447)), [#11692](https://redirect.github.com/phpstan/phpstan/issues/11692), thanks [@staabm](https://redirect.github.com/staabm)! - Narrow string on `*strlen()` with positive-int ([#3407](https://redirect.github.com/phpstan/phpstan-src/pull/3407)), [#11558](https://redirect.github.com/phpstan/phpstan/issues/11558), thanks [@staabm](https://redirect.github.com/staabm)! - Fix late static binding calls for first class callable ([#3435](https://redirect.github.com/phpstan/phpstan-src/pull/3435)), thanks [@mvorisek](https://redirect.github.com/mvorisek)! - E_ALL value is different on PHP 8.4 (https://github.com/phpstan/phpstan-src/commit/cb8f9103f4191f176d1b52cc45f661c3326f194f) # Function signature fixes π€ - Fix SplObjectStorage generic stub for PHP 8.4 (https://github.com/phpstan/phpstan-src/commit/9d9fb560907fcd4f6dd16789af4278ac7f683736) # Internals π - Extract getMessageFromInternalError (https://github.com/phpstan/phpstan-src/commit/d047c7f8ef8da296d0498696635735eed1762a4e) - Optimize NodeScopeResolverTest when running with `paratest` ([#3440](https://redirect.github.com/phpstan/phpstan-src/pull/3440)), thanks [@schlndh](https://redirect.github.com/schlndh)! - Expose `Output::isDecorated` and `Output::isVeryVerbose` ([#3436](https://redirect.github.com/phpstan/phpstan-src/pull/3436)), thanks [@ruudk](https://redirect.github.com/ruudk)! - Simplify SubstrDynamicReturnTypeExtension ([#3439](https://redirect.github.com/phpstan/phpstan-src/pull/3439)), thanks [@VincentLanglet](https://redirect.github.com/VincentLanglet)! - CollectedDataNode is VirtualNode (https://github.com/phpstan/phpstan-src/commit/2d613997f5a9298b2446d1a0b2f01a565ed8a457) ### [`v1.12.3`](https://redirect.github.com/phpstan/phpstan/releases/tag/1.12.3) [Compare Source](https://redirect.github.com/phpstan/phpstan/compare/1.12.2...1.12.3) # Improvements π§ - PHPStan Pro: debug corrupted PHAR signature message (https://github.com/phpstan/phpstan-src/commit/9815bbba4535b0605aef5b5cb9dd64a63bc44b1f) # Bugfixes π - Revert "Fix phar.yml workflow" (https://github.com/phpstan/phpstan-src/commit/6973519742ab804f57885c099b74971f465c7b24), [#11638](https://redirect.github.com/phpstan/phpstan/issues/11638) - Refactor `ArrayFilterFunctionReturnTypeReturnTypeExtension` and support first-class callable ([#3329](https://redirect.github.com/phpstan/phpstan-src/pull/3329)), [#11337](https://redirect.github.com/phpstan/phpstan/issues/11337), thanks [@takaram](https://redirect.github.com/takaram)! - Prevent resolving conditional types in callable param/return types ([#3405](https://redirect.github.com/phpstan/phpstan-src/pull/3405)), [#11472](https://redirect.github.com/phpstan/phpstan/issues/11472), thanks [@rvanvelzen](https://redirect.github.com/rvanvelzen)! - Fix wrongly convertion of `listConfiguration
π Schedule: Branch creation - At any time (no schedule defined), Automerge - 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 was generated by Mend Renovate. View the repository job log.