Skip to content

2.2.14

Latest

Choose a tag to compare

@phpstan-bot phpstan-bot released this 12 Sep 21:41
· 145 commits to 2.3.x since this release
Immutable release. Only release title and notes can be modified.
9c672e7

Improvements 🔧

  • Apply finally scope changes to try-catch exit points and check by-ref return types after finally (#6393), #13338
  • Fix PHP 8.6 deprecation in hoa/consistency (#6405), thanks @SanderMuller!

Bugfixes 🐛

  • Compare conditional expressions in MutatingScope::equals() (#6344), #15157, thanks @janedbal!
  • Fix containsNull() for union with null&T of mixed (#6390), thanks @vojtech-dobes!
  • Do not resolve include paths through a stream wrapper that is not registered (#6397), #15192
  • Do not treat mixed type arguments as compatible both ways when both generic types are parameterized (#6398), #15198
  • Fix union of template array-key with false losing the template (#6376), #13374, #13192, #10871, #8268, #7423, #7279, #7049, thanks @calebdw!
  • Fix false positive comparing identical generic types below level 8 (#6392), #13876, #12984, #12008, #11041, #10698, #9377, #9096, thanks @calebdw!
  • pcntl_exec() is not supported by blackfire (#6409), thanks @staabm!
  • UsedNamesRule: reset imported names at every namespace declaration instead of keying them by namespace name (#6413), #15215
  • Derive per-arm conditional expressions from overlapping ternary arm types (#6381), #7905
  • Record needle-implies-true conditional expression for in_array() assignments (#6381), #9752
  • Propagate conditional expressions through derived assignments (#6381), #13054
  • Do not report ?? null / ??= null as unnecessary when evaluating the right side has side effects (#6418), #15134, thanks @VincentLanglet and @staabm!

Performance 🏎️

  • Reduce repeated work when matching ignored errors (#6374), thanks @zonuexe!
  • Do not look up class reflection for properties without hooks (#6396)
  • Share the directory walk between the analyse and the scan file finder (#6396)
  • Read the exported PHPDoc scope off the AST instead of through FileTypeMapper (#6396)
  • Memoize ClassReflection::getName() (#6406)
  • Inline single-return getters when building the PHAR (#6406, #6412)
  • Remove a union of values from a set in one pass (#6427)
  • Key types by their value where describe() was standing in for it (#6427)
  • Answer reflection cache misses without a failing include() (#6430)

Function signature fixes 🤖

  • Locale::getPrimaryLanguage() can return empty string (#6400), thanks @BenMorel!

Internals 🔍

  • Fix PHPUnit warning (#6375), thanks @staabm!
  • Trust PHPStan's own types when running from a source checkout too (#6406)
  • Build the macOS turbo extension for arm64 only (#6407)