phpstan/phpstan
### [`v1.11.0`](https://togithub.com/phpstan/phpstan/releases/tag/1.11.0)
[Compare Source](https://togithub.com/phpstan/phpstan/compare/1.10.67...1.11.0)
[**Read the article about PHPStan 1.11 on phpstan.org ยป**](https://phpstan.org/blog/phpstan-1-11-errors-identifiers-phpstan-pro-reboot)
# Major new features ๐
- **Error identifiers**
- A way to categorize reported errors by a stable identifier. Up until now you had to use specific and ever-changing error messages
- Can be used for [ignoring specific errors locally](https://phpstan.org/user-guide/ignoring-errors#ignoring-in-code-using-phpdocs) with new `@phpstan-ignore` comment (uses current or next line automatically)
- Can be used for [ignoring specific errors in `ignoreErrors`](https://phpstan.org/user-guide/ignoring-errors#ignoring-in-configuration-file) section of your configuration file (phpstan.neon)
- Can be used in [output formatters](https://phpstan.org/user-guide/output-format)
- Can be seen in PHPStan Pro GUI or in TableErrorFormatter with `-v`
- Catalogue with source code links: https://phpstan.org/error-identifiers
- **PHPStan Pro Reboot**
- A new migration wizard will effortlessly migrate all your `@phpstan-ignore-line` and `@phpstan-ignore-next-line` to the new `@phpstan-ignore` comment style with error identifiers. The old comment style is dangerous because it ignores all errors, current and future, on that line.
- Revamped UI for much more comfortable viewing and browsing of reported errors
- The new UI also lets you **browse ignored errors**, from `ignoreErrors`, from your baseline and also ignored locally in source code using comments
- Streaming errors during launch: You don't have to wait for the analysis to complete, you can see errors as they come in during the analysis
- Support for mapping file paths to the host filesystem when running in Docker or remotely
- Try it out by running PHPStan with `--pro` CLI option
- PHPDoc tags describing callable lifecycle: `@param-immediately-invoked-callable`, `@param-later-invoked-callable`
- Useful for exception analysis (https://phpstan.org/blog/bring-your-exceptions-under-control) and `@phpstan-pure`
- PHPDoc tag `@param-closure-this` to describe what `$this` is bound to in a passed closure
- Two new config options around stricter offset checks in arrays ([#3028](https://togithub.com/phpstan/phpstan-src/pull/3028)), [#7553](https://togithub.com/phpstan/phpstan/issues/7553), thanks [@ttomdewit](https://togithub.com/ttomdewit)!
- `reportPossiblyNonexistentGeneralArrayOffset`
- `reportPossiblyNonexistentConstantArrayOffset`
- [Learn more in the documentation](https://phpstan.org/config-reference#reportpossiblynonexistentgeneralarrayoffset)
# Bleeding edge ๐ช
- Checking truthiness of `@phpstan-pure` above functions and methods
- Check `new`/function call/method call/static method call on a separate line without any side effects even without `@phpstan-pure` PHPDoc tag on the declaration side
- https://github.com/phpstan/phpstan-src/commit/281a87d1ab61809076ecfa6dfc2cc86e3babe235
- [#3020](https://togithub.com/phpstan/phpstan-src/pull/3020), thanks [@staabm](https://togithub.com/staabm)!
- [#3022](https://togithub.com/phpstan/phpstan-src/pull/3022), thanks [@staabm](https://togithub.com/staabm)!
- [#3023](https://togithub.com/phpstan/phpstan-src/pull/3023), thanks [@staabm](https://togithub.com/staabm)!
- BetterNoopRule - take advantage of impure points (https://github.com/phpstan/phpstan-src/commit/a6470521b65d7424f552633c1f3827704c6262c3), [#10389](https://togithub.com/phpstan/phpstan/issues/10389)
- Run missing type check on `@param-out` (https://github.com/phpstan/phpstan-src/commit/56b20024386d983927c64dfa895ff026bed2798c)
- CallToConstructorStatementWithoutSideEffectsRule - report class with no constructor (https://github.com/phpstan/phpstan-src/commit/b116d25a6e4ba6c09f59af6569d9e6f6fd20aff4)
- Deprecated: returning plain strings as errors, use RuleErrorBuilder
- Learn more: [Using RuleErrorBuilder to enrich reported errors in custom rules](https://phpstan.org/blog/using-rule-error-builder)
- Deprecated: returning RuleError without identifier (https://github.com/phpstan/phpstan-src/commit/969e6fa31d5484d42dab902703cfc6820a983cfd)
*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 ๐ง
- Generic RuleErrorBuilder (https://github.com/phpstan/phpstan-src/commit/9a3ed85178097e2d74f27623dd02bdd72c571e5b)
- Deprecate `checkMissingIterableValueType: false` and `checkGenericClassInNonGenericObjectType: false` in favour of ignoring via identifiers (https://github.com/phpstan/phpstan-src/commit/a64998108b318581b0203e84582711c3e4d1e43c)
- Deprecate old NoopRule - replaced by BetterNoopRule in bleeding edge (https://github.com/phpstan/phpstan-src/commit/109083571de6102cb854b9975c1463551ef678d0)
- Allow ignoring errors from CollectedDataNode with local comments (https://github.com/phpstan/phpstan-src/commit/dc3b75ab4a2acd863405416620240302b284973a)
- Introduce `new` type ([#3050](https://togithub.com/phpstan/phpstan-src/pull/3050)), [#9704](https://togithub.com/phpstan/phpstan/issues/9704), thanks [@ruudk](https://togithub.com/ruudk)!
- RuleTestCase - fail on PHP warnings, notices etc. ([#3030](https://togithub.com/phpstan/phpstan-src/pull/3030)), thanks [@janedbal](https://togithub.com/janedbal)!
- Check duplicate assignment of redeclared promoted readonly properties ([#3049](https://togithub.com/phpstan/phpstan-src/pull/3049)), [#8101](https://togithub.com/phpstan/phpstan/issues/8101), [#9863](https://togithub.com/phpstan/phpstan/issues/9863), [#9864](https://togithub.com/phpstan/phpstan/issues/9864), thanks [@schlndh](https://togithub.com/schlndh)!
- Remove line from "nikic/php-parser" error message ([#2845](https://togithub.com/phpstan/phpstan-src/pull/2845)), thanks [@mvorisek](https://togithub.com/mvorisek)!
- Stub validator - PHPStan classes are known without extra stubs (https://github.com/phpstan/phpstan-src/commit/d004c239677fb7abe41aa16e8e1b45bfac63f773)
- Stub validator - PhpParser classes are known without extra stubs (https://github.com/phpstan/phpstan-src/commit/3e498e1592221f3a01527c10318424014d52f85d)
- CheckstyleErrorFormatter - include error identifier in source attribute (https://github.com/phpstan/phpstan-src/commit/f66cf5badd2c98317d1d296ba24c3be77efcda18), [#1205](https://togithub.com/phpstan/phpstan/issues/1205)
- BaselinePhpErrorFormatter - error identifiers in comments (https://github.com/phpstan/phpstan-src/commit/4b32cac2d1b98c6af65c07041fdbc64e5d3f3baf)
- `RuleErrorBuilder::file()` - file path needs to exist (https://github.com/phpstan/phpstan-src/commit/c453f29f60992167a5aa46d4926c18a420ae7b26)
- AbstractMethodInNonAbstractClassRule - better error message for enums (https://github.com/phpstan/phpstan-src/commit/b5dd34e492b03566458e98b314c6852cfd683916)
- Fixed Xdebug spelling ([#2746](https://togithub.com/phpstan/phpstan-src/pull/2746)), thanks [@derickr](https://togithub.com/derickr)!
- Track invalidated `$this` and used variables after invoking closure ([#2980](https://togithub.com/phpstan/phpstan-src/pull/2980))
- Support `@phan-` prefixes on recognized PHPDoc tags ([#3000](https://togithub.com/phpstan/phpstan-src/pull/3000)), thanks [@anomiex](https://togithub.com/anomiex)!
- `pure-callable` and `pure-Closure` PHPDoc types (https://github.com/phpstan/phpstan-src/commit/cdaff5f00d621c3a94e048b8bd9fa864d47b3228)
- `highlight_string()` flips side-effects depending on $return ([#3021](https://togithub.com/phpstan/phpstan-src/pull/3021)), thanks [@staabm](https://togithub.com/staabm)!
- Improve types for predefined constants ([#3054](https://togithub.com/phpstan/phpstan-src/pull/3054)), thanks [@zonuexe](https://togithub.com/zonuexe)!
# Bugfixes ๐
- Make `AccessoryNonFalsyStringType::toInteger()` return `IntegerType` instead of non-zero ([#3018](https://togithub.com/phpstan/phpstan-src/pull/3018)), [#10893](https://togithub.com/phpstan/phpstan/issues/10893), thanks [@zonuexe](https://togithub.com/zonuexe)!
- Filter scope by non-empty array after foreach regardless of `polluteScopeWithAlwaysIterableForeach` ([#3029](https://togithub.com/phpstan/phpstan-src/pull/3029)), [#10922](https://togithub.com/phpstan/phpstan/issues/10922), thanks [@VincentLanglet](https://togithub.com/VincentLanglet)!
- Preserve large arrays with same keys through union ([#3032](https://togithub.com/phpstan/phpstan-src/pull/3032)), [#9397](https://togithub.com/phpstan/phpstan/issues/9397), [#10080](https://togithub.com/phpstan/phpstan/issues/10080), thanks [@schlndh](https://togithub.com/schlndh)!
- Fix `count($x) > $n === true` negation ([#3037](https://togithub.com/phpstan/phpstan-src/pull/3037)), [#10952](https://togithub.com/phpstan/phpstan/issues/10952), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)!
- Fix NAN not accepting NAN ([#3036](https://togithub.com/phpstan/phpstan-src/pull/3036)), [#10956](https://togithub.com/phpstan/phpstan/issues/10956), [#10297](https://togithub.com/phpstan/phpstan/issues/10297), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)!
- DateTimeInstantiationRule - fix error message for `new` with wrong name case (https://github.com/phpstan/phpstan-src/commit/59ac31a554203a7ae3fb9449bbd5b61f3afe2e20)
- Process ConstFetch (https://github.com/phpstan/phpstan-src/commit/b5c63c296783bd067b14bad410dab2b87a1b7b3c)
- Fix `preg_match_all` behaviour with no flags (https://github.com/phpstan/phpstan-src/commit/a856ec7ab5540cb4a8d30e9e170958a32a7165b2)
- `file_get_contents` is an impure function (https://github.com/phpstan/phpstan-src/commit/2b5b3174c7f00e56b7692b4c26552b2ad13c73d5)
- Fix `ClosureType::equals()` (https://github.com/phpstan/phpstan-src/commit/29c35b584a948e9a3c90e2d56312069ce073e6e6)
- Use statement result of analysed anonymous class to inform about throw points and impure points (https://github.com/phpstan/phpstan-src/commit/70a75f68896e5f7eaa988c0cb7f20dad32c3c172)
- Filter out implicit throw points from callables when `exceptions.implicitThrows: false` ([#3016](https://togithub.com/phpstan/phpstan-src/pull/3016)), thanks [@janedbal](https://togithub.com/janedbal)!
- Fix `ConstantArrayType::hasOffsetValueType()` for offset union type where all types are valid (https://github.com/phpstan/phpstan-src/commit/26e949b0d093751c98e9a106f680092abf3b28d9)
- `non-empty-list` always has offset 0 (https://github.com/phpstan/phpstan-src/commit/f4d1d481472b45c56ba2cd49ae98065092217f36)
- Narrow to `non-empty-string`/`non-falsey-string` after `mb_strlen()` ([#3038](https://togithub.com/phpstan/phpstan-src/pull/3038)), thanks [@staabm](https://togithub.com/staabm)!
- Implement `Type::isOffsetAccessLegal()` to detect offset access that crashes even in `isset()` ([#3045](https://togithub.com/phpstan/phpstan-src/pull/3045)), [#8393](https://togithub.com/phpstan/phpstan/issues/8393), [#10926](https://togithub.com/phpstan/phpstan/issues/10926), thanks [@rajyan](https://togithub.com/rajyan)!
- Specify types on `match()` condition correctly ([#3053](https://togithub.com/phpstan/phpstan-src/pull/3053)), [#10974](https://togithub.com/phpstan/phpstan/issues/10974), [#9694](https://togithub.com/phpstan/phpstan/issues/9694), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)!
- `json_decode` with force array flag: subtract all objects, not just stdClass ([#3052](https://togithub.com/phpstan/phpstan-src/pull/3052)), thanks [@rajyan](https://togithub.com/rajyan)!
- Fix `strlen($x) > $n === true` negation ([#3040](https://togithub.com/phpstan/phpstan-src/pull/3040)), thanks [@staabm](https://togithub.com/staabm)!
- Support multi-byte string function variants ([#3039](https://togithub.com/phpstan/phpstan-src/pull/3039)), thanks [@staabm](https://togithub.com/staabm)!
- Final scope from `Continue_` points should not be used for `while (true)` ([#3057](https://togithub.com/phpstan/phpstan-src/pull/3057)), [#10980](https://togithub.com/phpstan/phpstan/issues/10980), thanks [@greew](https://togithub.com/greew)!
- Fix enum performance problem ([#3062](https://togithub.com/phpstan/phpstan-src/pull/3062), [#3060](https://togithub.com/phpstan/phpstan-src/pull/3060)), [#10979](https://togithub.com/phpstan/phpstan/issues/10979), thanks [@staabm](https://togithub.com/staabm)!
- NULL and null as a property default value are treated differently when overriding a parent property ([#3063](https://togithub.com/phpstan/phpstan-src/pull/3063)), [#10987](https://togithub.com/phpstan/phpstan/issues/10987), thanks [@staabm](https://togithub.com/staabm)!
# Function signature fixes ๐ค
- Make the url key of metadata returned by `stream_get_meta_data()` optional ([#3024](https://togithub.com/phpstan/phpstan-src/pull/3024)), [#10887](https://togithub.com/phpstan/phpstan/issues/10887), thanks [@hirokinoue](https://togithub.com/hirokinoue)!
- Narrow `Closure::bind` `$newScope` param ([#2817](https://togithub.com/phpstan/phpstan-src/pull/2817)), thanks [@mvorisek](https://togithub.com/mvorisek)!
- Infer object type mysqli_fetch_object ([#2675](https://togithub.com/phpstan/phpstan/issues/2675)) ([#2675](https://togithub.com/phpstan/phpstan-src/pull/2675)), thanks [@staabm](https://togithub.com/staabm)!
- Fix `Imagick::identifyImage()` return type ([#3017](https://togithub.com/phpstan/phpstan-src/pull/3017)), thanks [@SVillette](https://togithub.com/SVillette)!
# Internals ๐
- Clean up old identifiers and metadata (https://github.com/phpstan/phpstan-src/commit/c476a8611d06ed5ce850ba74bd087ed0fa9304ad)
- Delete StatementOrderVisitor that is no longer needed (https://github.com/phpstan/phpstan-src/commit/017d321f47b2a49c11b0337a920235b0770da164)
- Introduce `ClassReflection::getClassTypeDescription()` (https://github.com/phpstan/phpstan-src/commit/dec9e435a7e0cea96079eb08c799df6b49b92e82)
- Fix classname typo in tests ([#2461](https://togithub.com/phpstan/phpstan-src/pull/2461)), thanks [@szepeviktor](https://togithub.com/szepeviktor)!
- Fix various typos ([#2463](https://togithub.com/phpstan/phpstan-src/pull/2463)), thanks [@szepeviktor](https://togithub.com/szepeviktor)!
- Added text regarding patch issues during installation ([#2670](https://togithub.com/phpstan/phpstan-src/pull/2670)), thanks [@mt-satak](https://togithub.com/mt-satak)!
- Fix typo in ArgumentsNormalizer ([#2705](https://togithub.com/phpstan/phpstan-src/pull/2705)), thanks [@mad-briller](https://togithub.com/mad-briller)!
- Rich PHPDoc for ExceptionTypeResolver (https://github.com/phpstan/phpstan-src/commit/e7ab4f741c0ec22cf70457c7a542b7978202b10a)
- Hide internal commands ([#2833](https://togithub.com/phpstan/phpstan-src/pull/2833)), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)!
- Test invalidated object in static closure ([#2981](https://togithub.com/phpstan/phpstan-src/pull/2981)), thanks [@staabm](https://togithub.com/staabm)!
- PHPDoc: address multiple variables defined in one [@param](https://togithub.com/param) ([#3001](https://togithub.com/phpstan/phpstan-src/pull/3001)), thanks [@Muqsit](https://togithub.com/Muqsit)!
- Do not assume every contributor uses PhpStorm (https://github.com/phpstan/phpstan-src/commit/d1834e69d06e0f85a45db8f5fb7a2c5a6ce898b6)
- TypeInferenceTestCase: ability to disable implicit throws ([#3015](https://togithub.com/phpstan/phpstan-src/pull/3015)), thanks [@janedbal](https://togithub.com/janedbal)!
- Slightly reduce comparing and calling methods for trivial optimizations ([#3004](https://togithub.com/phpstan/phpstan-src/pull/3004)), [#10926](https://togithub.com/phpstan/phpstan/issues/10926), thanks [@zonuexe](https://togithub.com/zonuexe)!
- AnalyserResultFinalizer - DRY of running CollectedDataNode rules (https://github.com/phpstan/phpstan-src/commit/38e2c96ee45733c8d3b44d048ce27a9b5450718e)
- Introduce LocalIgnoresProcessor (https://github.com/phpstan/phpstan-src/commit/d026655260727c7c6e4cd69d50d57569e9128c13)
- Introduce `RuleErrorBuilder::treatPhpDocTypesAsCertainTip()` for a bit more DRYness ([#3035](https://togithub.com/phpstan/phpstan-src/pull/3035)), thanks [@axlon](https://togithub.com/axlon)!
- Make ResultCacheEndToEndTest pass level 9 ([#3055](https://togithub.com/phpstan/phpstan-src/pull/3055)), [#10977](https://togithub.com/phpstan/phpstan/issues/10977), thanks [@AJenbo](https://togithub.com/AJenbo)!
- ClassReflection - cache enum cases (https://github.com/phpstan/phpstan-src/commit/39ce0425737cdbacfee5fbc08160d023cb5bc639), [#10979](https://togithub.com/phpstan/phpstan/issues/10979)
phpstan/phpstan-phpunit
### [`v1.4.0`](https://togithub.com/phpstan/phpstan-phpunit/releases/tag/1.4.0)
[Compare Source](https://togithub.com/phpstan/phpstan-phpunit/compare/1.3.16...1.4.0)
- [f3ea021](http://github.com/phpstan/phpstan-phpunit/commit/f3ea021866f4263f07ca3636bf22c64be9610c11) - Update lock-closed-issues.yml
- [f93aec7](http://github.com/phpstan/phpstan-phpunit/commit/f93aec74624bcdb9773da40a729f111df1f6e22a) - Merge remote-tracking branch 'origin/1.3.x' into 1.4.x
- [77bdf96](http://github.com/phpstan/phpstan-phpunit/commit/77bdf9644e105833f810eefc3d6e051ac33dd939) - Update metcalfc/changelog-generator action to v4.3.1
- [6a1df9a](http://github.com/phpstan/phpstan-phpunit/commit/6a1df9a11edc5642f4a3b462fd1bcb7b07bafa35) - Update cbrgm/mastodon-github-action action to v2
- [e95a58b](http://github.com/phpstan/phpstan-phpunit/commit/e95a58baebb1f2daf7067c3667bff371b202151d) - Update metcalfc/changelog-generator action to v4.2.0
- [77345df](http://github.com/phpstan/phpstan-phpunit/commit/77345df14f04d05252c8b13a5b4444eacd6a0764) - Update dessant/lock-threads action to v5
- [99bb21e](http://github.com/phpstan/phpstan-phpunit/commit/99bb21e6ead1df1c6b9ec2b5750804a00aa6fb08) - Merge branch '1.3.x' into 1.4.x
- [ac8ea99](http://github.com/phpstan/phpstan-phpunit/commit/ac8ea9981675cb991b7bbcde55add4b73dc7c690) - Update actions/checkout action to v4
- [529f300](http://github.com/phpstan/phpstan-phpunit/commit/529f300b5bf38a5ca83617b162ffd58c8c6f5647) - Merge branch '1.3.x' into 1.4.x
- [62e883e](http://github.com/phpstan/phpstan-phpunit/commit/62e883ea3762a31faa4f6609c20fb1363762d4e3) - Open 1.4.x-dev
- [97ec1d3](http://github.com/phpstan/phpstan-phpunit/commit/97ec1d34e9eb2669df4de20e0eb9d6a99f92b4d6) - Merge branch '1.3.x' into 1.4.x
- [4d99a7d](http://github.com/phpstan/phpstan-phpunit/commit/4d99a7d020727a2c7b4b428aecbe6a0171bb78a5) - Require PHPStan 1.11
- [908e232](http://github.com/phpstan/phpstan-phpunit/commit/908e232dab1297e5ad6e492b5dfa2d828727915d) - Error identifiers
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.
๐ป Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
[ ] If you want to rebase/retry this PR, click this checkbox.
This PR contains the following updates:
1.10.67
->1.11.0
1.3.16
->1.4.0
Release Notes
phpstan/phpstan
### [`v1.11.0`](https://togithub.com/phpstan/phpstan/releases/tag/1.11.0) [Compare Source](https://togithub.com/phpstan/phpstan/compare/1.10.67...1.11.0) [**Read the article about PHPStan 1.11 on phpstan.org ยป**](https://phpstan.org/blog/phpstan-1-11-errors-identifiers-phpstan-pro-reboot) # Major new features ๐ - **Error identifiers** - A way to categorize reported errors by a stable identifier. Up until now you had to use specific and ever-changing error messages - Can be used for [ignoring specific errors locally](https://phpstan.org/user-guide/ignoring-errors#ignoring-in-code-using-phpdocs) with new `@phpstan-ignore` comment (uses current or next line automatically) - Can be used for [ignoring specific errors in `ignoreErrors`](https://phpstan.org/user-guide/ignoring-errors#ignoring-in-configuration-file) section of your configuration file (phpstan.neon) - Can be used in [output formatters](https://phpstan.org/user-guide/output-format) - Can be seen in PHPStan Pro GUI or in TableErrorFormatter with `-v` - Catalogue with source code links: https://phpstan.org/error-identifiers - **PHPStan Pro Reboot** - A new migration wizard will effortlessly migrate all your `@phpstan-ignore-line` and `@phpstan-ignore-next-line` to the new `@phpstan-ignore` comment style with error identifiers. The old comment style is dangerous because it ignores all errors, current and future, on that line. - Revamped UI for much more comfortable viewing and browsing of reported errors - The new UI also lets you **browse ignored errors**, from `ignoreErrors`, from your baseline and also ignored locally in source code using comments - Streaming errors during launch: You don't have to wait for the analysis to complete, you can see errors as they come in during the analysis - Support for mapping file paths to the host filesystem when running in Docker or remotely - Try it out by running PHPStan with `--pro` CLI option - PHPDoc tags describing callable lifecycle: `@param-immediately-invoked-callable`, `@param-later-invoked-callable` - Useful for exception analysis (https://phpstan.org/blog/bring-your-exceptions-under-control) and `@phpstan-pure` - PHPDoc tag `@param-closure-this` to describe what `$this` is bound to in a passed closure - Two new config options around stricter offset checks in arrays ([#3028](https://togithub.com/phpstan/phpstan-src/pull/3028)), [#7553](https://togithub.com/phpstan/phpstan/issues/7553), thanks [@ttomdewit](https://togithub.com/ttomdewit)! - `reportPossiblyNonexistentGeneralArrayOffset` - `reportPossiblyNonexistentConstantArrayOffset` - [Learn more in the documentation](https://phpstan.org/config-reference#reportpossiblynonexistentgeneralarrayoffset) # Bleeding edge ๐ช - Checking truthiness of `@phpstan-pure` above functions and methods - Check `new`/function call/method call/static method call on a separate line without any side effects even without `@phpstan-pure` PHPDoc tag on the declaration side - https://github.com/phpstan/phpstan-src/commit/281a87d1ab61809076ecfa6dfc2cc86e3babe235 - [#3020](https://togithub.com/phpstan/phpstan-src/pull/3020), thanks [@staabm](https://togithub.com/staabm)! - [#3022](https://togithub.com/phpstan/phpstan-src/pull/3022), thanks [@staabm](https://togithub.com/staabm)! - [#3023](https://togithub.com/phpstan/phpstan-src/pull/3023), thanks [@staabm](https://togithub.com/staabm)! - BetterNoopRule - take advantage of impure points (https://github.com/phpstan/phpstan-src/commit/a6470521b65d7424f552633c1f3827704c6262c3), [#10389](https://togithub.com/phpstan/phpstan/issues/10389) - Run missing type check on `@param-out` (https://github.com/phpstan/phpstan-src/commit/56b20024386d983927c64dfa895ff026bed2798c) - CallToConstructorStatementWithoutSideEffectsRule - report class with no constructor (https://github.com/phpstan/phpstan-src/commit/b116d25a6e4ba6c09f59af6569d9e6f6fd20aff4) - Deprecated: returning plain strings as errors, use RuleErrorBuilder - Learn more: [Using RuleErrorBuilder to enrich reported errors in custom rules](https://phpstan.org/blog/using-rule-error-builder) - Deprecated: returning RuleError without identifier (https://github.com/phpstan/phpstan-src/commit/969e6fa31d5484d42dab902703cfc6820a983cfd) *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 ๐ง - Generic RuleErrorBuilder (https://github.com/phpstan/phpstan-src/commit/9a3ed85178097e2d74f27623dd02bdd72c571e5b) - Deprecate `checkMissingIterableValueType: false` and `checkGenericClassInNonGenericObjectType: false` in favour of ignoring via identifiers (https://github.com/phpstan/phpstan-src/commit/a64998108b318581b0203e84582711c3e4d1e43c) - Deprecate old NoopRule - replaced by BetterNoopRule in bleeding edge (https://github.com/phpstan/phpstan-src/commit/109083571de6102cb854b9975c1463551ef678d0) - Allow ignoring errors from CollectedDataNode with local comments (https://github.com/phpstan/phpstan-src/commit/dc3b75ab4a2acd863405416620240302b284973a) - Introduce `new` type ([#3050](https://togithub.com/phpstan/phpstan-src/pull/3050)), [#9704](https://togithub.com/phpstan/phpstan/issues/9704), thanks [@ruudk](https://togithub.com/ruudk)! - RuleTestCase - fail on PHP warnings, notices etc. ([#3030](https://togithub.com/phpstan/phpstan-src/pull/3030)), thanks [@janedbal](https://togithub.com/janedbal)! - Check duplicate assignment of redeclared promoted readonly properties ([#3049](https://togithub.com/phpstan/phpstan-src/pull/3049)), [#8101](https://togithub.com/phpstan/phpstan/issues/8101), [#9863](https://togithub.com/phpstan/phpstan/issues/9863), [#9864](https://togithub.com/phpstan/phpstan/issues/9864), thanks [@schlndh](https://togithub.com/schlndh)! - Remove line from "nikic/php-parser" error message ([#2845](https://togithub.com/phpstan/phpstan-src/pull/2845)), thanks [@mvorisek](https://togithub.com/mvorisek)! - Stub validator - PHPStan classes are known without extra stubs (https://github.com/phpstan/phpstan-src/commit/d004c239677fb7abe41aa16e8e1b45bfac63f773) - Stub validator - PhpParser classes are known without extra stubs (https://github.com/phpstan/phpstan-src/commit/3e498e1592221f3a01527c10318424014d52f85d) - CheckstyleErrorFormatter - include error identifier in source attribute (https://github.com/phpstan/phpstan-src/commit/f66cf5badd2c98317d1d296ba24c3be77efcda18), [#1205](https://togithub.com/phpstan/phpstan/issues/1205) - BaselinePhpErrorFormatter - error identifiers in comments (https://github.com/phpstan/phpstan-src/commit/4b32cac2d1b98c6af65c07041fdbc64e5d3f3baf) - `RuleErrorBuilder::file()` - file path needs to exist (https://github.com/phpstan/phpstan-src/commit/c453f29f60992167a5aa46d4926c18a420ae7b26) - AbstractMethodInNonAbstractClassRule - better error message for enums (https://github.com/phpstan/phpstan-src/commit/b5dd34e492b03566458e98b314c6852cfd683916) - Fixed Xdebug spelling ([#2746](https://togithub.com/phpstan/phpstan-src/pull/2746)), thanks [@derickr](https://togithub.com/derickr)! - Track invalidated `$this` and used variables after invoking closure ([#2980](https://togithub.com/phpstan/phpstan-src/pull/2980)) - Support `@phan-` prefixes on recognized PHPDoc tags ([#3000](https://togithub.com/phpstan/phpstan-src/pull/3000)), thanks [@anomiex](https://togithub.com/anomiex)! - `pure-callable` and `pure-Closure` PHPDoc types (https://github.com/phpstan/phpstan-src/commit/cdaff5f00d621c3a94e048b8bd9fa864d47b3228) - `highlight_string()` flips side-effects depending on $return ([#3021](https://togithub.com/phpstan/phpstan-src/pull/3021)), thanks [@staabm](https://togithub.com/staabm)! - Improve types for predefined constants ([#3054](https://togithub.com/phpstan/phpstan-src/pull/3054)), thanks [@zonuexe](https://togithub.com/zonuexe)! # Bugfixes ๐ - Make `AccessoryNonFalsyStringType::toInteger()` return `IntegerType` instead of non-zero ([#3018](https://togithub.com/phpstan/phpstan-src/pull/3018)), [#10893](https://togithub.com/phpstan/phpstan/issues/10893), thanks [@zonuexe](https://togithub.com/zonuexe)! - Filter scope by non-empty array after foreach regardless of `polluteScopeWithAlwaysIterableForeach` ([#3029](https://togithub.com/phpstan/phpstan-src/pull/3029)), [#10922](https://togithub.com/phpstan/phpstan/issues/10922), thanks [@VincentLanglet](https://togithub.com/VincentLanglet)! - Preserve large arrays with same keys through union ([#3032](https://togithub.com/phpstan/phpstan-src/pull/3032)), [#9397](https://togithub.com/phpstan/phpstan/issues/9397), [#10080](https://togithub.com/phpstan/phpstan/issues/10080), thanks [@schlndh](https://togithub.com/schlndh)! - Fix `count($x) > $n === true` negation ([#3037](https://togithub.com/phpstan/phpstan-src/pull/3037)), [#10952](https://togithub.com/phpstan/phpstan/issues/10952), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)! - Fix NAN not accepting NAN ([#3036](https://togithub.com/phpstan/phpstan-src/pull/3036)), [#10956](https://togithub.com/phpstan/phpstan/issues/10956), [#10297](https://togithub.com/phpstan/phpstan/issues/10297), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)! - DateTimeInstantiationRule - fix error message for `new` with wrong name case (https://github.com/phpstan/phpstan-src/commit/59ac31a554203a7ae3fb9449bbd5b61f3afe2e20) - Process ConstFetch (https://github.com/phpstan/phpstan-src/commit/b5c63c296783bd067b14bad410dab2b87a1b7b3c) - Fix `preg_match_all` behaviour with no flags (https://github.com/phpstan/phpstan-src/commit/a856ec7ab5540cb4a8d30e9e170958a32a7165b2) - `file_get_contents` is an impure function (https://github.com/phpstan/phpstan-src/commit/2b5b3174c7f00e56b7692b4c26552b2ad13c73d5) - Fix `ClosureType::equals()` (https://github.com/phpstan/phpstan-src/commit/29c35b584a948e9a3c90e2d56312069ce073e6e6) - Use statement result of analysed anonymous class to inform about throw points and impure points (https://github.com/phpstan/phpstan-src/commit/70a75f68896e5f7eaa988c0cb7f20dad32c3c172) - Filter out implicit throw points from callables when `exceptions.implicitThrows: false` ([#3016](https://togithub.com/phpstan/phpstan-src/pull/3016)), thanks [@janedbal](https://togithub.com/janedbal)! - Fix `ConstantArrayType::hasOffsetValueType()` for offset union type where all types are valid (https://github.com/phpstan/phpstan-src/commit/26e949b0d093751c98e9a106f680092abf3b28d9) - `non-empty-list` always has offset 0 (https://github.com/phpstan/phpstan-src/commit/f4d1d481472b45c56ba2cd49ae98065092217f36) - Narrow to `non-empty-string`/`non-falsey-string` after `mb_strlen()` ([#3038](https://togithub.com/phpstan/phpstan-src/pull/3038)), thanks [@staabm](https://togithub.com/staabm)! - Implement `Type::isOffsetAccessLegal()` to detect offset access that crashes even in `isset()` ([#3045](https://togithub.com/phpstan/phpstan-src/pull/3045)), [#8393](https://togithub.com/phpstan/phpstan/issues/8393), [#10926](https://togithub.com/phpstan/phpstan/issues/10926), thanks [@rajyan](https://togithub.com/rajyan)! - Specify types on `match()` condition correctly ([#3053](https://togithub.com/phpstan/phpstan-src/pull/3053)), [#10974](https://togithub.com/phpstan/phpstan/issues/10974), [#9694](https://togithub.com/phpstan/phpstan/issues/9694), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)! - `json_decode` with force array flag: subtract all objects, not just stdClass ([#3052](https://togithub.com/phpstan/phpstan-src/pull/3052)), thanks [@rajyan](https://togithub.com/rajyan)! - Fix `strlen($x) > $n === true` negation ([#3040](https://togithub.com/phpstan/phpstan-src/pull/3040)), thanks [@staabm](https://togithub.com/staabm)! - Support multi-byte string function variants ([#3039](https://togithub.com/phpstan/phpstan-src/pull/3039)), thanks [@staabm](https://togithub.com/staabm)! - Final scope from `Continue_` points should not be used for `while (true)` ([#3057](https://togithub.com/phpstan/phpstan-src/pull/3057)), [#10980](https://togithub.com/phpstan/phpstan/issues/10980), thanks [@greew](https://togithub.com/greew)! - Fix enum performance problem ([#3062](https://togithub.com/phpstan/phpstan-src/pull/3062), [#3060](https://togithub.com/phpstan/phpstan-src/pull/3060)), [#10979](https://togithub.com/phpstan/phpstan/issues/10979), thanks [@staabm](https://togithub.com/staabm)! - NULL and null as a property default value are treated differently when overriding a parent property ([#3063](https://togithub.com/phpstan/phpstan-src/pull/3063)), [#10987](https://togithub.com/phpstan/phpstan/issues/10987), thanks [@staabm](https://togithub.com/staabm)! # Function signature fixes ๐ค - Make the url key of metadata returned by `stream_get_meta_data()` optional ([#3024](https://togithub.com/phpstan/phpstan-src/pull/3024)), [#10887](https://togithub.com/phpstan/phpstan/issues/10887), thanks [@hirokinoue](https://togithub.com/hirokinoue)! - Narrow `Closure::bind` `$newScope` param ([#2817](https://togithub.com/phpstan/phpstan-src/pull/2817)), thanks [@mvorisek](https://togithub.com/mvorisek)! - Infer object type mysqli_fetch_object ([#2675](https://togithub.com/phpstan/phpstan/issues/2675)) ([#2675](https://togithub.com/phpstan/phpstan-src/pull/2675)), thanks [@staabm](https://togithub.com/staabm)! - Fix `Imagick::identifyImage()` return type ([#3017](https://togithub.com/phpstan/phpstan-src/pull/3017)), thanks [@SVillette](https://togithub.com/SVillette)! # Internals ๐ - Clean up old identifiers and metadata (https://github.com/phpstan/phpstan-src/commit/c476a8611d06ed5ce850ba74bd087ed0fa9304ad) - Delete StatementOrderVisitor that is no longer needed (https://github.com/phpstan/phpstan-src/commit/017d321f47b2a49c11b0337a920235b0770da164) - Introduce `ClassReflection::getClassTypeDescription()` (https://github.com/phpstan/phpstan-src/commit/dec9e435a7e0cea96079eb08c799df6b49b92e82) - Fix classname typo in tests ([#2461](https://togithub.com/phpstan/phpstan-src/pull/2461)), thanks [@szepeviktor](https://togithub.com/szepeviktor)! - Fix various typos ([#2463](https://togithub.com/phpstan/phpstan-src/pull/2463)), thanks [@szepeviktor](https://togithub.com/szepeviktor)! - Added text regarding patch issues during installation ([#2670](https://togithub.com/phpstan/phpstan-src/pull/2670)), thanks [@mt-satak](https://togithub.com/mt-satak)! - Fix typo in ArgumentsNormalizer ([#2705](https://togithub.com/phpstan/phpstan-src/pull/2705)), thanks [@mad-briller](https://togithub.com/mad-briller)! - Rich PHPDoc for ExceptionTypeResolver (https://github.com/phpstan/phpstan-src/commit/e7ab4f741c0ec22cf70457c7a542b7978202b10a) - Hide internal commands ([#2833](https://togithub.com/phpstan/phpstan-src/pull/2833)), thanks [@rvanvelzen](https://togithub.com/rvanvelzen)! - Test invalidated object in static closure ([#2981](https://togithub.com/phpstan/phpstan-src/pull/2981)), thanks [@staabm](https://togithub.com/staabm)! - PHPDoc: address multiple variables defined in one [@param](https://togithub.com/param) ([#3001](https://togithub.com/phpstan/phpstan-src/pull/3001)), thanks [@Muqsit](https://togithub.com/Muqsit)! - Do not assume every contributor uses PhpStorm (https://github.com/phpstan/phpstan-src/commit/d1834e69d06e0f85a45db8f5fb7a2c5a6ce898b6) - TypeInferenceTestCase: ability to disable implicit throws ([#3015](https://togithub.com/phpstan/phpstan-src/pull/3015)), thanks [@janedbal](https://togithub.com/janedbal)! - Slightly reduce comparing and calling methods for trivial optimizations ([#3004](https://togithub.com/phpstan/phpstan-src/pull/3004)), [#10926](https://togithub.com/phpstan/phpstan/issues/10926), thanks [@zonuexe](https://togithub.com/zonuexe)! - AnalyserResultFinalizer - DRY of running CollectedDataNode rules (https://github.com/phpstan/phpstan-src/commit/38e2c96ee45733c8d3b44d048ce27a9b5450718e) - Introduce LocalIgnoresProcessor (https://github.com/phpstan/phpstan-src/commit/d026655260727c7c6e4cd69d50d57569e9128c13) - Introduce `RuleErrorBuilder::treatPhpDocTypesAsCertainTip()` for a bit more DRYness ([#3035](https://togithub.com/phpstan/phpstan-src/pull/3035)), thanks [@axlon](https://togithub.com/axlon)! - Make ResultCacheEndToEndTest pass level 9 ([#3055](https://togithub.com/phpstan/phpstan-src/pull/3055)), [#10977](https://togithub.com/phpstan/phpstan/issues/10977), thanks [@AJenbo](https://togithub.com/AJenbo)! - ClassReflection - cache enum cases (https://github.com/phpstan/phpstan-src/commit/39ce0425737cdbacfee5fbc08160d023cb5bc639), [#10979](https://togithub.com/phpstan/phpstan/issues/10979)phpstan/phpstan-phpunit
### [`v1.4.0`](https://togithub.com/phpstan/phpstan-phpunit/releases/tag/1.4.0) [Compare Source](https://togithub.com/phpstan/phpstan-phpunit/compare/1.3.16...1.4.0) - [f3ea021](http://github.com/phpstan/phpstan-phpunit/commit/f3ea021866f4263f07ca3636bf22c64be9610c11) - Update lock-closed-issues.yml - [f93aec7](http://github.com/phpstan/phpstan-phpunit/commit/f93aec74624bcdb9773da40a729f111df1f6e22a) - Merge remote-tracking branch 'origin/1.3.x' into 1.4.x - [77bdf96](http://github.com/phpstan/phpstan-phpunit/commit/77bdf9644e105833f810eefc3d6e051ac33dd939) - Update metcalfc/changelog-generator action to v4.3.1 - [6a1df9a](http://github.com/phpstan/phpstan-phpunit/commit/6a1df9a11edc5642f4a3b462fd1bcb7b07bafa35) - Update cbrgm/mastodon-github-action action to v2 - [e95a58b](http://github.com/phpstan/phpstan-phpunit/commit/e95a58baebb1f2daf7067c3667bff371b202151d) - Update metcalfc/changelog-generator action to v4.2.0 - [77345df](http://github.com/phpstan/phpstan-phpunit/commit/77345df14f04d05252c8b13a5b4444eacd6a0764) - Update dessant/lock-threads action to v5 - [99bb21e](http://github.com/phpstan/phpstan-phpunit/commit/99bb21e6ead1df1c6b9ec2b5750804a00aa6fb08) - Merge branch '1.3.x' into 1.4.x - [ac8ea99](http://github.com/phpstan/phpstan-phpunit/commit/ac8ea9981675cb991b7bbcde55add4b73dc7c690) - Update actions/checkout action to v4 - [529f300](http://github.com/phpstan/phpstan-phpunit/commit/529f300b5bf38a5ca83617b162ffd58c8c6f5647) - Merge branch '1.3.x' into 1.4.x - [62e883e](http://github.com/phpstan/phpstan-phpunit/commit/62e883ea3762a31faa4f6609c20fb1363762d4e3) - Open 1.4.x-dev - [97ec1d3](http://github.com/phpstan/phpstan-phpunit/commit/97ec1d34e9eb2669df4de20e0eb9d6a99f92b4d6) - Merge branch '1.3.x' into 1.4.x - [4d99a7d](http://github.com/phpstan/phpstan-phpunit/commit/4d99a7d020727a2c7b4b428aecbe6a0171bb78a5) - Require PHPStan 1.11 - [908e232](http://github.com/phpstan/phpstan-phpunit/commit/908e232dab1297e5ad6e492b5dfa2d828727915d) - Error identifiersConfiguration
๐ 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.
๐ป Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Renovate Bot.