Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix/cache fail silent #9932

Merged
merged 2 commits into from
Jun 21, 2023
Merged

Conversation

ygottschalk
Copy link
Contributor

see discussion in #9925

@ygottschalk
Copy link
Contributor Author

ygottschalk commented Jun 20, 2023

#9925 (comment) will not be catched by this. For fixing that, we would need to check the unserialized array to not contain __PHP_Incomplete_Class for unserialize (and whatever the equivalent for igbinary_unserialize might be)

Should that be done in this PR? 👍 👎

@ygottschalk ygottschalk marked this pull request as ready for review June 20, 2023 10:38
@kkmuffme
Copy link
Contributor

Good:

  1. Errors when failing to write to cache should be ignored too though?

  2. use grep 'throw .*cache' on psalm's codebase to find additional places that you missed

@ygottschalk
Copy link
Contributor Author

  1. Errors when failing to write to cache should be ignored too though?

Throw if a serious error happened (eg psalm is explicitly configured to use cache but cache dir is not writeable)

I don't think so. Either it's disposable or not; otherwise we will end up in a discussion on what is "serious" and what is not? e.g. is a E_WARNING serious? (when we (un)serialize/compress)

...?!

  1. use grep 'throw .*cache' on psalm's codebase to find additional places that you missed

only thing I could identify beeing relevant is \Psalm\Internal\Provider\ClassLikeStorageProvider::exhume which considers things to be in cache but I could not confirm that there is a check confirming that....

@dkarlovi
Copy link
Contributor

IMO we can add a few more cases if they're obvious, but shouldn't block this PR until we reach 100% completeness, Psalm's cache handling was a total mess, repeated in 10 different places before #9889 and nobody cared about it then, now that we've significantly moved the needle, we've all become code gourmands, nothing but the very best is even worth considering. :)

Let's be pragmatic and see this merged, the further inconsistencies (if any) can easily be fixed as discovered, and the found inconsistencies will actually be places I've missed in #9889 so they'll work exactly like the previous release, not improving, but not breaking either.

@ygottschalk
Copy link
Contributor Author

This should get fixed (and in here is a possible solution: https://wiki.php.net/rfc/improve_unserialize_error_handling), but that can happen in a different PR.

I would really like to have some form of output for the write error or keep throwing....

@ro0NL
Copy link
Contributor

ro0NL commented Jun 21, 2023

#9925 (comment)

note it's no blocker for us, just the first example i encountered, and it's probably an edge case

i agree with @dkarlovi, if we cant solve this generically, then baby steps it is

@orklah
Copy link
Collaborator

orklah commented Jun 21, 2023

Let's be pragmatic and see this merged

agreed :)

Thanks!

@orklah orklah added the release:internal The PR will be included in 'Internal changes' section of the release notes label Jun 21, 2023
@orklah orklah merged commit bb28c5a into vimeo:master Jun 21, 2023
oguzhand95 referenced this pull request in cerbos/cerbos-sdk-php Jul 3, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [phpstan/phpstan](https://github.com/phpstan/phpstan) | require-dev
| patch | `1.10.19` -> `1.10.22` |
| [phpunit/phpunit](https://phpunit.de/)
([source](https://github.com/sebastianbergmann/phpunit)) | require-dev
| patch | `10.2.2` -> `10.2.3` |
| [vimeo/psalm](https://github.com/vimeo/psalm) | require-dev | minor
| `5.12.0` -> `5.13.1` |

---

### Release Notes

<details>
<summary>phpstan/phpstan (phpstan/phpstan)</summary>

###
[`v1.10.22`](https://github.com/phpstan/phpstan/releases/tag/1.10.22)

[Compare
Source](https://github.com/phpstan/phpstan/compare/1.10.21...1.10.22)

# Bleeding edge 🔪

- More precise `file()` flags args
([#&#8203;2476](https://github.com/phpstan/phpstan-src/pull/2476),
[#&#8203;2482](https://github.com/phpstan/phpstan-src/pull/2482)),
thanks [@&#8203;staabm](https://github.com/staabm)!
- Non-static methods cannot be used as static callables in PHP 8+
([#&#8203;2420](https://github.com/phpstan/phpstan-src/pull/2420)),
thanks [@&#8203;staabm](https://github.com/staabm)!
- More precise `flock()` operation flags
([#&#8203;2477](https://github.com/phpstan/phpstan-src/pull/2477)),
thanks [@&#8203;staabm](https://github.com/staabm)!
- Rule for `call_user_func()`
([#&#8203;2479](https://github.com/phpstan/phpstan-src/pull/2479)),
thanks [@&#8203;staabm](https://github.com/staabm)!

*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 🔧

- Add return type extension for `constant()`
([#&#8203;2474](https://github.com/phpstan/phpstan-src/pull/2474)),
thanks [@&#8203;herndlm](https://github.com/herndlm)!
- Dynamic `assert()` throw type extension
([#&#8203;2427](https://github.com/phpstan/phpstan-src/pull/2427)),
thanks
[@&#8203;patrickkusebauch](https://github.com/patrickkusebauch)!
- Update nikic/PHP-Parser
(phpstan/phpstan-src@79b3034)
- PHP 8.3: `json_validate()` stub
(phpstan/phpstan-src@828b269),
thanks [@&#8203;staabm](https://github.com/staabm)!
- Implement `call_user_func()` DynamicFunctionReturnTypeExtension
([#&#8203;2479](https://github.com/phpstan/phpstan-src/pull/2479)),
thanks [@&#8203;staabm](https://github.com/staabm)!

# Bugfixes 🐛

- Add support for math with constant numeric string
([#&#8203;2209](https://github.com/phpstan/phpstan-src/pull/2209)),
[#&#8203;8803](https://github.com/phpstan/phpstan/issues/8803),
[#&#8203;8827](https://github.com/phpstan/phpstan/issues/8827), thanks
[@&#8203;VincentLanglet](https://github.com/VincentLanglet)!
- Use case insensitive matching to detect usages of private methods
([#&#8203;2484](https://github.com/phpstan/phpstan-src/pull/2484)),
[#&#8203;8346](https://github.com/phpstan/phpstan/issues/8346), thanks
[@&#8203;stof](https://github.com/stof)!
- fix array_splice with non-array replacement
([#&#8203;2457](https://github.com/phpstan/phpstan-src/pull/2457)),
thanks [@&#8203;schlndh](https://github.com/schlndh)!
- Resolve key and value type of partially non-iterable types when
entering foreach
(phpstan/phpstan-src@cb5a2b4),
[#&#8203;9535](https://github.com/phpstan/phpstan/issues/9535),
[#&#8203;4907](https://github.com/phpstan/phpstan/issues/4907),
[#&#8203;8924](https://github.com/phpstan/phpstan/issues/8924),
[#&#8203;5998](https://github.com/phpstan/phpstan/issues/5998)
- Foreach can append to the array but it does not change the number of
iterations
(phpstan/phpstan-src@27085c5),
[#&#8203;4612](https://github.com/phpstan/phpstan/issues/4612)
- MutatingScope - process left side of BooleanAnd and BooleanOr before
getting type of the whole expression
(phpstan/phpstan-src@989dd6f),
[#&#8203;5365](https://github.com/phpstan/phpstan/issues/5365),
[#&#8203;6551](https://github.com/phpstan/phpstan/issues/6551),
[#&#8203;7491](https://github.com/phpstan/phpstan/issues/7491),
[#&#8203;4004](https://github.com/phpstan/phpstan/issues/4004),
[#&#8203;2499](https://github.com/phpstan/phpstan/issues/2499)
- MutatingScope - process ternary cond before getting type of the whole
expression
(phpstan/phpstan-src@faba805)
- Fix processing switch with complex case conditions
(phpstan/phpstan-src@f6b34f2),
[#&#8203;5326](https://github.com/phpstan/phpstan/issues/5326)
- Fix ClassConstFetch Identical specification with Yoda conditions
([#&#8203;2498](https://github.com/phpstan/phpstan-src/pull/2498)),
[#&#8203;9542](https://github.com/phpstan/phpstan/issues/9542), thanks
[@&#8203;herndlm](https://github.com/herndlm)!

# Function signature fixes 🤖

- Update functionMap for ext-mongodb 1.16
([#&#8203;2473](https://github.com/phpstan/phpstan-src/pull/2473)),
thanks [@&#8203;alcaeus](https://github.com/alcaeus)!
- Add false to the `db2_num_rows()` return type
([#&#8203;2456](https://github.com/phpstan/phpstan-src/pull/2456)),
thanks [@&#8203;morozov](https://github.com/morozov)!
- More precise `ignore_user_abort()` return type
([#&#8203;2489](https://github.com/phpstan/phpstan-src/pull/2489)),
thanks [@&#8203;staabm](https://github.com/staabm)!

# Internals 🔍

- Type projections, part 1: call-site variance in GenericObjectType
([#&#8203;2471](https://github.com/phpstan/phpstan-src/pull/2471)),
thanks [@&#8203;jiripudil](https://github.com/jiripudil)!
- Test PHP 8.3
([#&#8203;2486](https://github.com/phpstan/phpstan-src/pull/2486))
- Cleanup NodeScopeResolver
([#&#8203;2499](https://github.com/phpstan/phpstan-src/pull/2499)),
thanks [@&#8203;staabm](https://github.com/staabm)!

###
[`v1.10.21`](https://github.com/phpstan/phpstan/releases/tag/1.10.21)

[Compare
Source](https://github.com/phpstan/phpstan/compare/1.10.20...1.10.21)

# Bugfixes 🐛

- Fix defining variables in match condition
(phpstan/phpstan-src@d6c2752),
[#&#8203;9474](https://github.com/phpstan/phpstan/issues/9474)
- Fix UnusedClosureUsesRule for already traversed match
(phpstan/phpstan-src@a719486),
[https://github.com/phpstan/phpstan-phpunit/issues/190](https://github.com/phpstan/phpstan-phpunit/issues/190),
[#&#8203;9478](https://github.com/phpstan/phpstan/issues/9478)
- Update BetterReflection
(phpstan/phpstan-src@a540e44),
[#&#8203;9477](https://github.com/phpstan/phpstan/issues/9477)
- Fix newInstance on ReflectionAttribute adapter with enum argument
(ondrejmirtes/BetterReflection@277b960)

# Internals 🔍

- Cheap checks first in ObjectType
([#&#8203;2475](https://github.com/phpstan/phpstan-src/pull/2475)),
thanks [@&#8203;mad-briller](https://github.com/mad-briller)!

###
[`v1.10.20`](https://github.com/phpstan/phpstan/releases/tag/1.10.20)

[Compare
Source](https://github.com/phpstan/phpstan/compare/1.10.19...1.10.20)

# Improvements 🔧

- PHPStan Pro: Change Cloudflare DNS for to family version
([#&#8203;2467](https://github.com/phpstan/phpstan-src/pull/2467)),
thanks [@&#8203;spaze](https://github.com/spaze)!
- Add `non-zero-int` type
([#&#8203;2449](https://github.com/phpstan/phpstan-src/pull/2449)),
thanks [@&#8203;PrinsFrank](https://github.com/PrinsFrank)!
- Implement `gettype()` return type extension
([#&#8203;2437](https://github.com/phpstan/phpstan-src/pull/2437)),
thanks [@&#8203;staabm](https://github.com/staabm)!

# Bugfixes 🐛

- Allow to remember constant and impure expressions in `match` condition
(phpstan/phpstan-src@0cdda0b),
[#&#8203;4451](https://github.com/phpstan/phpstan/issues/4451),
[#&#8203;6064](https://github.com/phpstan/phpstan/issues/6064),
[#&#8203;9457](https://github.com/phpstan/phpstan/issues/9457)
- Fix `gettype` in `match` condition
(phpstan/phpstan-src@e4ef00c,
phpstan/phpstan-src@caa0a5b),
[#&#8203;8614](https://github.com/phpstan/phpstan/issues/8614)
- Fix `get_class` in `match` condition
(phpstan/phpstan-src@106526d),
[#&#8203;1885](https://github.com/phpstan/phpstan/issues/1885),
[#&#8203;8536](https://github.com/phpstan/phpstan/issues/8536),
[#&#8203;8092](https://github.com/phpstan/phpstan/issues/8092)
- Understand `get_class` compared with `static::class`
(phpstan/phpstan-src@590eb03),
[#&#8203;1885](https://github.com/phpstan/phpstan/issues/1885)
- Understand `gettype` when there's a union of strings on the other side
(phpstan/phpstan-src@36e412f),
[#&#8203;6294](https://github.com/phpstan/phpstan/issues/6294),
[#&#8203;2580](https://github.com/phpstan/phpstan/issues/2580)
- Treat ConstantArrayType as covariant in its keys and values
([#&#8203;2464](https://github.com/phpstan/phpstan-src/pull/2464)),
[#&#8203;9161](https://github.com/phpstan/phpstan/issues/9161), thanks
[@&#8203;jiripudil](https://github.com/jiripudil)!
- Treat ArrayType as covariant in its keys and values
([#&#8203;2465](https://github.com/phpstan/phpstan-src/pull/2465)),
thanks [@&#8203;jiripudil](https://github.com/jiripudil)!
- Make `NonEmptyArrayType::toArray()` return `$this`
([#&#8203;2349](https://github.com/phpstan/phpstan-src/pull/2349)),
[#&#8203;9208](https://github.com/phpstan/phpstan/issues/9208), thanks
[@&#8203;zonuexe](https://github.com/zonuexe)!
- Retain list type via `array_push()` and `array_unshift()`
([#&#8203;2451](https://github.com/phpstan/phpstan-src/pull/2451)),
[#&#8203;8449](https://github.com/phpstan/phpstan/issues/8449), thanks
[@&#8203;herndlm](https://github.com/herndlm)!
- For `@var` above throw and return, change the type of expr only for
the stmt callback
(phpstan/phpstan-src@b551095),
[#&#8203;9459](https://github.com/phpstan/phpstan/issues/9459)

# Internals 🔍

- Remove redundant conditions from
RemoveUnusedCodeByPhpVersionIdVisitor.
([#&#8203;2459](https://github.com/phpstan/phpstan-src/pull/2459)),
thanks [@&#8203;mad-briller](https://github.com/mad-briller)!
- Return early in CachingVistor to avoid always-false instanceof checks.
([#&#8203;2460](https://github.com/phpstan/phpstan-src/pull/2460)),
thanks [@&#8203;mad-briller](https://github.com/mad-briller)!
- Introduce CombinationsHelper
(phpstan/phpstan-src@175307e)
- `Type::getFiniteTypes()`
(phpstan/phpstan-src@7912caf,
phpstan/phpstan-src@fa9a951,
phpstan/phpstan-src@b5cf52b)

</details>

<details>
<summary>sebastianbergmann/phpunit (phpunit/phpunit)</summary>

###
[`v10.2.3`](https://github.com/sebastianbergmann/phpunit/compare/10.2.2...10.2.3)

[Compare
Source](https://github.com/sebastianbergmann/phpunit/compare/10.2.2...10.2.3)

</details>

<details>
<summary>vimeo/psalm (vimeo/psalm)</summary>

### [`v5.13.1`](https://github.com/vimeo/psalm/releases/tag/5.13.1)

[Compare
Source](https://github.com/vimeo/psalm/compare/5.13.0...5.13.1)

<!-- Release notes generated using configuration in .github/release.yml
at 5.13.1 -->

#### What's Changed

##### Fixes

- Fix glob CallMap and stub to prevent crash on alpine by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9942](https://github.com/vimeo/psalm/pull/9942)

##### Docs

- Fix the link reference in the doc by
[@&#8203;stof](https://github.com/stof) in
[https://github.com/vimeo/psalm/pull/9967](https://github.com/vimeo/psalm/pull/9967)

**Full Changelog**:
vimeo/psalm@5.13.0...5.13.1

### [`v5.13.0`](https://github.com/vimeo/psalm/releases/tag/5.13.0)

[Compare
Source](https://github.com/vimeo/psalm/compare/5.12.0...5.13.0)

<!-- Release notes generated using configuration in .github/release.yml
at master -->

#### What's Changed

##### Features

- Add a support for multilevel glob wildcards by
[@&#8203;2e3s](https://github.com/2e3s) in
[https://github.com/vimeo/psalm/pull/9813](https://github.com/vimeo/psalm/pull/9813)
- Mapping closed inheritance to union during assertion by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9829](https://github.com/vimeo/psalm/pull/9829)
- Use PHPStorm output format by default on JetBrains terminals by
[@&#8203;lptn](https://github.com/lptn) in
[https://github.com/vimeo/psalm/pull/9848](https://github.com/vimeo/psalm/pull/9848)
- sprintf basic non-empty-string return type provider by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9841](https://github.com/vimeo/psalm/pull/9841)
- Extend Shepherd payload by information about package versions by
[@&#8203;lptn](https://github.com/lptn) in
[https://github.com/vimeo/psalm/pull/9856](https://github.com/vimeo/psalm/pull/9856)
- Allow if/false assert for same variable to allow array/list
distinction by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9853](https://github.com/vimeo/psalm/pull/9853)
- readonly does not have write access, therefore is safe as long as the…
by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9887](https://github.com/vimeo/psalm/pull/9887)
- Sprintf improve return param type validation by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9877](https://github.com/vimeo/psalm/pull/9877)
- feat: cache.gz by [@&#8203;dkarlovi](https://github.com/dkarlovi) in
[https://github.com/vimeo/psalm/pull/9889](https://github.com/vimeo/psalm/pull/9889)
- make compressor configurable v2 by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9924](https://github.com/vimeo/psalm/pull/9924)
- Invalidate cached methods when referenced files are deleted by
[@&#8203;tscni](https://github.com/tscni) in
[https://github.com/vimeo/psalm/pull/9931](https://github.com/vimeo/psalm/pull/9931)
- Invalidate cached methods when referenced class property types change
by [@&#8203;tscni](https://github.com/tscni) in
[https://github.com/vimeo/psalm/pull/9955](https://github.com/vimeo/psalm/pull/9955)

##### Fixes

- glob: allow empty string for pattern by
[@&#8203;Hanmac](https://github.com/Hanmac) in
[https://github.com/vimeo/psalm/pull/9814](https://github.com/vimeo/psalm/pull/9814)
- [GH-9825](https://github.com/vimeo/psalm/issues/9825) by
[@&#8203;jack-worman](https://github.com/jack-worman) in
[https://github.com/vimeo/psalm/pull/9828](https://github.com/vimeo/psalm/pull/9828)
- Fix [#&#8203;9824](https://github.com/vimeo/psalm/issues/9824) const
enum self reference by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9833](https://github.com/vimeo/psalm/pull/9833)
- base64\_decode returns false only in strict mode by
[@&#8203;kamil-tekiela](https://github.com/kamil-tekiela) in
[https://github.com/vimeo/psalm/pull/9832](https://github.com/vimeo/psalm/pull/9832)
- Dirname return type non empty string by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9837](https://github.com/vimeo/psalm/pull/9837)
- uniqid return type non-empty-string inconsistent by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9842](https://github.com/vimeo/psalm/pull/9842)
- PropertyNotSetInConstructor should not report for abstract
constructors by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9844](https://github.com/vimeo/psalm/pull/9844)
- Intersect template types during inheritance check by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9865](https://github.com/vimeo/psalm/pull/9865)
- Fix generic type params mapping by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9866](https://github.com/vimeo/psalm/pull/9866)
- Better intersection of template types during inheritance check by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9883](https://github.com/vimeo/psalm/pull/9883)
- Update the signature of debug_backtrace by
[@&#8203;stof](https://github.com/stof) in
[https://github.com/vimeo/psalm/pull/9868](https://github.com/vimeo/psalm/pull/9868)
- Glob return type stub by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9878](https://github.com/vimeo/psalm/pull/9878)
- Improve the return types for getimagesize and getimagesizefromstring
by [@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9875](https://github.com/vimeo/psalm/pull/9875)
- Unmark DateInterval::$invert as read-only by
[@&#8203;morozov](https://github.com/morozov) in
[https://github.com/vimeo/psalm/pull/9895](https://github.com/vimeo/psalm/pull/9895)
- Sprintf additional validations and bugfix by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9904](https://github.com/vimeo/psalm/pull/9904)
- Fixes [#&#8203;9827](https://github.com/vimeo/psalm/issues/9827) by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9903](https://github.com/vimeo/psalm/pull/9903)
- set type of **LINE** to positive int by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9921](https://github.com/vimeo/psalm/pull/9921)
- Add a stub file for Attributes defined by PHP by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9920](https://github.com/vimeo/psalm/pull/9920)
- Don't update types of the outer scope when in an elseif conditional by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9922](https://github.com/vimeo/psalm/pull/9922)
- Update callmap for ext-mongodb 1.16 by
[@&#8203;alcaeus](https://github.com/alcaeus) in
[https://github.com/vimeo/psalm/pull/9933](https://github.com/vimeo/psalm/pull/9933)
- Add call map entries for MongoDB functions by
[@&#8203;alcaeus](https://github.com/alcaeus) in
[https://github.com/vimeo/psalm/pull/9934](https://github.com/vimeo/psalm/pull/9934)
- fix reconciliation between a list and iterable by
[@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9950](https://github.com/vimeo/psalm/pull/9950)
- `non-empty-list` assertion for iterable by
[@&#8203;boesing](https://github.com/boesing) in
[https://github.com/vimeo/psalm/pull/9953](https://github.com/vimeo/psalm/pull/9953)
- fix PHP 7 sprintf too many arguments false positive by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9943](https://github.com/vimeo/psalm/pull/9943)

##### Docs

- Document classAndDescendants configuration tag by
[@&#8203;janopae](https://github.com/janopae) in
[https://github.com/vimeo/psalm/pull/9867](https://github.com/vimeo/psalm/pull/9867)

##### Internal changes

- Introduce and use `IssueData` constants for severity levels by
[@&#8203;lptn](https://github.com/lptn) in
[https://github.com/vimeo/psalm/pull/9846](https://github.com/vimeo/psalm/pull/9846)
- Shepherd: send a list of issues (instead of array with int keys) by
[@&#8203;lptn](https://github.com/lptn) in
[https://github.com/vimeo/psalm/pull/9845](https://github.com/vimeo/psalm/pull/9845)
- fix failing mock tests by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9880](https://github.com/vimeo/psalm/pull/9880)
- Bump mheap/github-action-required-labels from 4 to 5 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/vimeo/psalm/pull/9898](https://github.com/vimeo/psalm/pull/9898)
- fix CI warnings for findUnusedCode in psalm 6 by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9915](https://github.com/vimeo/psalm/pull/9915)
- docblock parser minor performance gain by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9916](https://github.com/vimeo/psalm/pull/9916)
- improve perfs for switch by not creating reverse assertions against
constants by [@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9929](https://github.com/vimeo/psalm/pull/9929)
- remove StementsVolatileCache for perf reasons by
[@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9930](https://github.com/vimeo/psalm/pull/9930)
- put config to true to prevent deprecations for new config files by
[@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9857](https://github.com/vimeo/psalm/pull/9857)
- Make config warn about missing cache related functions by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9935](https://github.com/vimeo/psalm/pull/9935)
- Fix/cache fail silent by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9932](https://github.com/vimeo/psalm/pull/9932)

##### Typos

- Fixed typo in ConstantTest by
[@&#8203;staabm](https://github.com/staabm) in
[https://github.com/vimeo/psalm/pull/9835](https://github.com/vimeo/psalm/pull/9835)

#### New Contributors

- [@&#8203;Hanmac](https://github.com/Hanmac) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9814](https://github.com/vimeo/psalm/pull/9814)
- [@&#8203;stof](https://github.com/stof) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9868](https://github.com/vimeo/psalm/pull/9868)

**Full Changelog**:
vimeo/psalm@5.12.0...5.13.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
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](https://github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/cerbos/cerbos-sdk-php).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xNDEuMyIsInVwZGF0ZWRJblZlciI6IjM1LjE0NC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Oğuzhan Durgun <oguzhandurgun95@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@ygottschalk ygottschalk deleted the fix/cache-fail-silent branch August 5, 2023 12:58
tcarrio referenced this pull request in open-feature/php-sdk Aug 16, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [vimeo/psalm](https://github.com/vimeo/psalm) | require-dev | minor
| `~5.8.0` -> `~5.14.0` |

---

### Release Notes

<details>
<summary>vimeo/psalm (vimeo/psalm)</summary>

### [`v5.14.0`](https://github.com/vimeo/psalm/releases/tag/5.14.0)

[Compare
Source](https://github.com/vimeo/psalm/compare/5.13.1...5.14.0)

<!-- Release notes generated using configuration in .github/release.yml
at 5.x -->

#### What's Changed

##### Features

- Infer output format from GITHUB_ACTIONS env by
[@&#8203;ro0NL](https://github.com/ro0NL) in
[https://github.com/vimeo/psalm/pull/9982](https://github.com/vimeo/psalm/pull/9982)
- fix mixed replace return types for arrays by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9981](https://github.com/vimeo/psalm/pull/9981)
- make stubbed constant types configurable with comment by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9992](https://github.com/vimeo/psalm/pull/9992)
- Allow space before array shape opening brace and added unit tests by
[@&#8203;rhertogh](https://github.com/rhertogh) in
[https://github.com/vimeo/psalm/pull/10000](https://github.com/vimeo/psalm/pull/10000)
- Add generic stubs for MongoDB BSON classes by
[@&#8203;alcaeus](https://github.com/alcaeus) in
[https://github.com/vimeo/psalm/pull/10016](https://github.com/vimeo/psalm/pull/10016)
- Allow comments in types (e.g. in array shapes) by
[@&#8203;rhertogh](https://github.com/rhertogh) in
[https://github.com/vimeo/psalm/pull/10004](https://github.com/vimeo/psalm/pull/10004)
- [#&#8203;10030](https://github.com/vimeo/psalm/issues/10030) Fix
missing TaintedSql by [@&#8203;cgocast](https://github.com/cgocast) in
[https://github.com/vimeo/psalm/pull/10032](https://github.com/vimeo/psalm/pull/10032)
- Automatic LSP container path mapping by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10033](https://github.com/vimeo/psalm/pull/10033)
- added GitHub CI for unit tests with PHP 8.2 and 8.3 by
[@&#8203;thbley](https://github.com/thbley) in
[https://github.com/vimeo/psalm/pull/10028](https://github.com/vimeo/psalm/pull/10028)
- Modernize LSP progress reporting by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10050](https://github.com/vimeo/psalm/pull/10050)
- Add type detection for PDOStatement::fetchAll(PDO::FETCH_CLASS,
SomeClass::class) by [@&#8203;thbley](https://github.com/thbley) in
[https://github.com/vimeo/psalm/pull/10055](https://github.com/vimeo/psalm/pull/10055)

##### Fixes

- Fix sprintf single arg splat array by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9975](https://github.com/vimeo/psalm/pull/9975)
- Fixed exhuming enums as enums, not as classes by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9988](https://github.com/vimeo/psalm/pull/9988)
- Missing composer lock should not invalidate cache created with missing
composer lock by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9970](https://github.com/vimeo/psalm/pull/9970)
- no error for printf with only 1 arg by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9993](https://github.com/vimeo/psalm/pull/9993)
- Fix "days" falsable return not ignored consistently by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9998](https://github.com/vimeo/psalm/pull/9998)
- offsetExists/Get/Set/Unset types were too generic by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9999](https://github.com/vimeo/psalm/pull/9999)
- Fix inference high order function when closure param is omitted by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/10014](https://github.com/vimeo/psalm/pull/10014)
- Fix incorrect positions set in code action edits by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10034](https://github.com/vimeo/psalm/pull/10034)
- Always report UnusedBaseline issues by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/10012](https://github.com/vimeo/psalm/pull/10012)
- Fix scanning of intersection types by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10043](https://github.com/vimeo/psalm/pull/10043)
- Fix combination of non-falsy-string and falsy literal by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10039](https://github.com/vimeo/psalm/pull/10039)
- Fix variadic callable type check by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/10066](https://github.com/vimeo/psalm/pull/10066)

##### Internal changes

- Fixed psalm self test by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9990](https://github.com/vimeo/psalm/pull/9990)
- Fix/phpparser deprecation name parts by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9964](https://github.com/vimeo/psalm/pull/9964)
- Simplify conditions with deep object access by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10037](https://github.com/vimeo/psalm/pull/10037)
- Map special RPC paths by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10046](https://github.com/vimeo/psalm/pull/10046)

#### New Contributors

- [@&#8203;rhertogh](https://github.com/rhertogh) made their first
contribution in
[https://github.com/vimeo/psalm/pull/10000](https://github.com/vimeo/psalm/pull/10000)
- [@&#8203;cgocast](https://github.com/cgocast) made their first
contribution in
[https://github.com/vimeo/psalm/pull/10032](https://github.com/vimeo/psalm/pull/10032)

**Full Changelog**:
vimeo/psalm@5.13.1...5.14.0

### [`v5.13.1`](https://github.com/vimeo/psalm/releases/tag/5.13.1)

[Compare
Source](https://github.com/vimeo/psalm/compare/5.13.0...5.13.1)

<!-- Release notes generated using configuration in .github/release.yml
at 5.13.1 -->

#### What's Changed

##### Fixes

- Fix glob CallMap and stub to prevent crash on alpine by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9942](https://github.com/vimeo/psalm/pull/9942)

##### Docs

- Fix the link reference in the doc by
[@&#8203;stof](https://github.com/stof) in
[https://github.com/vimeo/psalm/pull/9967](https://github.com/vimeo/psalm/pull/9967)

**Full Changelog**:
vimeo/psalm@5.13.0...5.13.1

### [`v5.13.0`](https://github.com/vimeo/psalm/releases/tag/5.13.0)

[Compare
Source](https://github.com/vimeo/psalm/compare/5.12.0...5.13.0)

<!-- Release notes generated using configuration in .github/release.yml
at master -->

#### What's Changed

##### Features

- Add a support for multilevel glob wildcards by
[@&#8203;2e3s](https://github.com/2e3s) in
[https://github.com/vimeo/psalm/pull/9813](https://github.com/vimeo/psalm/pull/9813)
- Mapping closed inheritance to union during assertion by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9829](https://github.com/vimeo/psalm/pull/9829)
- Use PHPStorm output format by default on JetBrains terminals by
[@&#8203;lptn](https://github.com/lptn) in
[https://github.com/vimeo/psalm/pull/9848](https://github.com/vimeo/psalm/pull/9848)
- sprintf basic non-empty-string return type provider by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9841](https://github.com/vimeo/psalm/pull/9841)
- Extend Shepherd payload by information about package versions by
[@&#8203;lptn](https://github.com/lptn) in
[https://github.com/vimeo/psalm/pull/9856](https://github.com/vimeo/psalm/pull/9856)
- Allow if/false assert for same variable to allow array/list
distinction by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9853](https://github.com/vimeo/psalm/pull/9853)
- readonly does not have write access, therefore is safe as long as the…
by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9887](https://github.com/vimeo/psalm/pull/9887)
- Sprintf improve return param type validation by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9877](https://github.com/vimeo/psalm/pull/9877)
- feat: cache.gz by [@&#8203;dkarlovi](https://github.com/dkarlovi) in
[https://github.com/vimeo/psalm/pull/9889](https://github.com/vimeo/psalm/pull/9889)
- make compressor configurable v2 by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9924](https://github.com/vimeo/psalm/pull/9924)
- Invalidate cached methods when referenced files are deleted by
[@&#8203;tscni](https://github.com/tscni) in
[https://github.com/vimeo/psalm/pull/9931](https://github.com/vimeo/psalm/pull/9931)
- Invalidate cached methods when referenced class property types change
by [@&#8203;tscni](https://github.com/tscni) in
[https://github.com/vimeo/psalm/pull/9955](https://github.com/vimeo/psalm/pull/9955)

##### Fixes

- glob: allow empty string for pattern by
[@&#8203;Hanmac](https://github.com/Hanmac) in
[https://github.com/vimeo/psalm/pull/9814](https://github.com/vimeo/psalm/pull/9814)
- [GH-9825](https://github.com/vimeo/psalm/issues/9825) by
[@&#8203;jack-worman](https://github.com/jack-worman) in
[https://github.com/vimeo/psalm/pull/9828](https://github.com/vimeo/psalm/pull/9828)
- Fix [#&#8203;9824](https://github.com/vimeo/psalm/issues/9824) const
enum self reference by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9833](https://github.com/vimeo/psalm/pull/9833)
- base64\_decode returns false only in strict mode by
[@&#8203;kamil-tekiela](https://github.com/kamil-tekiela) in
[https://github.com/vimeo/psalm/pull/9832](https://github.com/vimeo/psalm/pull/9832)
- Dirname return type non empty string by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9837](https://github.com/vimeo/psalm/pull/9837)
- uniqid return type non-empty-string inconsistent by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9842](https://github.com/vimeo/psalm/pull/9842)
- PropertyNotSetInConstructor should not report for abstract
constructors by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9844](https://github.com/vimeo/psalm/pull/9844)
- Intersect template types during inheritance check by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9865](https://github.com/vimeo/psalm/pull/9865)
- Fix generic type params mapping by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9866](https://github.com/vimeo/psalm/pull/9866)
- Better intersection of template types during inheritance check by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9883](https://github.com/vimeo/psalm/pull/9883)
- Update the signature of debug_backtrace by
[@&#8203;stof](https://github.com/stof) in
[https://github.com/vimeo/psalm/pull/9868](https://github.com/vimeo/psalm/pull/9868)
- Glob return type stub by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9878](https://github.com/vimeo/psalm/pull/9878)
- Improve the return types for getimagesize and getimagesizefromstring
by [@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9875](https://github.com/vimeo/psalm/pull/9875)
- Unmark DateInterval::$invert as read-only by
[@&#8203;morozov](https://github.com/morozov) in
[https://github.com/vimeo/psalm/pull/9895](https://github.com/vimeo/psalm/pull/9895)
- Sprintf additional validations and bugfix by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9904](https://github.com/vimeo/psalm/pull/9904)
- Fixes [#&#8203;9827](https://github.com/vimeo/psalm/issues/9827) by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9903](https://github.com/vimeo/psalm/pull/9903)
- set type of **LINE** to positive int by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9921](https://github.com/vimeo/psalm/pull/9921)
- Add a stub file for Attributes defined by PHP by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9920](https://github.com/vimeo/psalm/pull/9920)
- Don't update types of the outer scope when in an elseif conditional by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9922](https://github.com/vimeo/psalm/pull/9922)
- Update callmap for ext-mongodb 1.16 by
[@&#8203;alcaeus](https://github.com/alcaeus) in
[https://github.com/vimeo/psalm/pull/9933](https://github.com/vimeo/psalm/pull/9933)
- Add call map entries for MongoDB functions by
[@&#8203;alcaeus](https://github.com/alcaeus) in
[https://github.com/vimeo/psalm/pull/9934](https://github.com/vimeo/psalm/pull/9934)
- fix reconciliation between a list and iterable by
[@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9950](https://github.com/vimeo/psalm/pull/9950)
- `non-empty-list` assertion for iterable by
[@&#8203;boesing](https://github.com/boesing) in
[https://github.com/vimeo/psalm/pull/9953](https://github.com/vimeo/psalm/pull/9953)
- fix PHP 7 sprintf too many arguments false positive by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9943](https://github.com/vimeo/psalm/pull/9943)

##### Docs

- Document classAndDescendants configuration tag by
[@&#8203;janopae](https://github.com/janopae) in
[https://github.com/vimeo/psalm/pull/9867](https://github.com/vimeo/psalm/pull/9867)

##### Internal changes

- Introduce and use `IssueData` constants for severity levels by
[@&#8203;lptn](https://github.com/lptn) in
[https://github.com/vimeo/psalm/pull/9846](https://github.com/vimeo/psalm/pull/9846)
- Shepherd: send a list of issues (instead of array with int keys) by
[@&#8203;lptn](https://github.com/lptn) in
[https://github.com/vimeo/psalm/pull/9845](https://github.com/vimeo/psalm/pull/9845)
- fix failing mock tests by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9880](https://github.com/vimeo/psalm/pull/9880)
- Bump mheap/github-action-required-labels from 4 to 5 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/vimeo/psalm/pull/9898](https://github.com/vimeo/psalm/pull/9898)
- fix CI warnings for findUnusedCode in psalm 6 by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9915](https://github.com/vimeo/psalm/pull/9915)
- docblock parser minor performance gain by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9916](https://github.com/vimeo/psalm/pull/9916)
- improve perfs for switch by not creating reverse assertions against
constants by [@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9929](https://github.com/vimeo/psalm/pull/9929)
- remove StementsVolatileCache for perf reasons by
[@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9930](https://github.com/vimeo/psalm/pull/9930)
- put config to true to prevent deprecations for new config files by
[@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9857](https://github.com/vimeo/psalm/pull/9857)
- Make config warn about missing cache related functions by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9935](https://github.com/vimeo/psalm/pull/9935)
- Fix/cache fail silent by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9932](https://github.com/vimeo/psalm/pull/9932)

##### Typos

- Fixed typo in ConstantTest by
[@&#8203;staabm](https://github.com/staabm) in
[https://github.com/vimeo/psalm/pull/9835](https://github.com/vimeo/psalm/pull/9835)

#### New Contributors

- [@&#8203;Hanmac](https://github.com/Hanmac) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9814](https://github.com/vimeo/psalm/pull/9814)
- [@&#8203;stof](https://github.com/stof) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9868](https://github.com/vimeo/psalm/pull/9868)

**Full Changelog**:
vimeo/psalm@5.12.0...5.13.0

### [`v5.12.0`](https://github.com/vimeo/psalm/releases/tag/5.12.0)

[Compare
Source](https://github.com/vimeo/psalm/compare/5.11.0...5.12.0)

<!-- Release notes generated using configuration in .github/release.yml
at master -->

#### What's Changed

##### Features

- WIP - Limit inheritance to a subset of classes
[#&#8203;1450](https://github.com/vimeo/psalm/issues/1450) by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9687](https://github.com/vimeo/psalm/pull/9687)
- UnsupportedPropertyReferenceUsage by
[@&#8203;jack-worman](https://github.com/jack-worman) in
[https://github.com/vimeo/psalm/pull/9769](https://github.com/vimeo/psalm/pull/9769)
- Improve return types of pow() by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9795](https://github.com/vimeo/psalm/pull/9795)
- Narrow the type of $haystack when strpos(...) !== false by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9788](https://github.com/vimeo/psalm/pull/9788)
- allow using more than 8G of memory in psalter by
[@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9805](https://github.com/vimeo/psalm/pull/9805)

##### Fixes

- Fix missing global class type when scanning cached files by
[@&#8203;tscni](https://github.com/tscni) in
[https://github.com/vimeo/psalm/pull/9735](https://github.com/vimeo/psalm/pull/9735)
- Fix union argument type check against templated param by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9750](https://github.com/vimeo/psalm/pull/9750)
- Allow dynamic properties from PHPDoc by
[@&#8203;fluffycondor](https://github.com/fluffycondor) in
[https://github.com/vimeo/psalm/pull/9742](https://github.com/vimeo/psalm/pull/9742)
- improve glob stubs by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9752](https://github.com/vimeo/psalm/pull/9752)
- Removed return type false from date and gmdate by
[@&#8203;Alkisum](https://github.com/Alkisum) in
[https://github.com/vimeo/psalm/pull/9761](https://github.com/vimeo/psalm/pull/9761)
- methods and vars cannot be falsy by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/9796](https://github.com/vimeo/psalm/pull/9796)
- fix offset for type param changes by
[@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9803](https://github.com/vimeo/psalm/pull/9803)

##### Docs

- Documented suggestions for HTML user input by
[@&#8203;mmcev106](https://github.com/mmcev106) in
[https://github.com/vimeo/psalm/pull/9780](https://github.com/vimeo/psalm/pull/9780)
- Document array shape unsealing syntax by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9784](https://github.com/vimeo/psalm/pull/9784)

##### Internal changes

- Enable opcache if it is installed by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/9779](https://github.com/vimeo/psalm/pull/9779)

#### New Contributors

- [@&#8203;tscni](https://github.com/tscni) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9735](https://github.com/vimeo/psalm/pull/9735)
- [@&#8203;Alkisum](https://github.com/Alkisum) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9761](https://github.com/vimeo/psalm/pull/9761)

**Full Changelog**:
vimeo/psalm@5.11.0...5.12.0

### [`v5.11.0`](https://github.com/vimeo/psalm/releases/tag/5.11.0)

[Compare
Source](https://github.com/vimeo/psalm/compare/5.10.0...5.11.0)

<!-- Release notes generated using configuration in .github/release.yml
at master -->

#### What's Changed

##### Fixes

- SplDoublyLinkedList's index is always int by
[@&#8203;kamil-tekiela](https://github.com/kamil-tekiela) in
[https://github.com/vimeo/psalm/pull/9736](https://github.com/vimeo/psalm/pull/9736)
- Fix string negation to never by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9743](https://github.com/vimeo/psalm/pull/9743)
- Fix ParadoxicalCondition with complex match expression by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9739](https://github.com/vimeo/psalm/pull/9739)
- Fix invalid cast for templated class-string by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9738](https://github.com/vimeo/psalm/pull/9738)
- Fix OverriddenPropertyAccess error message by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/9740](https://github.com/vimeo/psalm/pull/9740)
- Ignore nullable return form SimpleXMLElement::addChild() by
[@&#8203;greg0ire](https://github.com/greg0ire) in
[https://github.com/vimeo/psalm/pull/9745](https://github.com/vimeo/psalm/pull/9745)

**Full Changelog**:
vimeo/psalm@5.10.0...5.11.0

### [`v5.10.0`](https://github.com/vimeo/psalm/releases/tag/5.10.0)

[Compare
Source](https://github.com/vimeo/psalm/compare/5.9.0...5.10.0)

<!-- Release notes generated using configuration in .github/release.yml
at master -->

#### What's Changed

##### Features

- Introduce `value-of` with backed enum cases in assertions by
[@&#8203;boesing](https://github.com/boesing) in
[https://github.com/vimeo/psalm/pull/9586](https://github.com/vimeo/psalm/pull/9586)
- Introduce callable object intersection by
[@&#8203;boesing](https://github.com/boesing) in
[https://github.com/vimeo/psalm/pull/9599](https://github.com/vimeo/psalm/pull/9599)
- Contextual inference for const callable by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9623](https://github.com/vimeo/psalm/pull/9623)
- Allow to intersect type alias with non-type-aliases by
[@&#8203;boesing](https://github.com/boesing) in
[https://github.com/vimeo/psalm/pull/9638](https://github.com/vimeo/psalm/pull/9638)
- Provide support for templated `value-of` enum values by
[@&#8203;boesing](https://github.com/boesing) in
[https://github.com/vimeo/psalm/pull/9655](https://github.com/vimeo/psalm/pull/9655)
- (re-)implement object-shape assertions by
[@&#8203;boesing](https://github.com/boesing) in
[https://github.com/vimeo/psalm/pull/9656](https://github.com/vimeo/psalm/pull/9656)
- Support anonymous object template replacement by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9664](https://github.com/vimeo/psalm/pull/9664)
- Implement unsealed array generic syntax by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/9694](https://github.com/vimeo/psalm/pull/9694)
- Introduce BeforeExpressionAnalysisEvent by
[@&#8203;tuqqu](https://github.com/tuqqu) in
[https://github.com/vimeo/psalm/pull/9725](https://github.com/vimeo/psalm/pull/9725)
- Add support for
[@&#8203;psalm-no-seal-properties](https://github.com/psalm-no-seal-properties)
and
[@&#8203;psalm-no-seal-methods](https://github.com/psalm-no-seal-methods)
by [@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9681](https://github.com/vimeo/psalm/pull/9681)

##### Fixes

- Fix remaining intl, reflection. xml and zip callmaps by
[@&#8203;othercorey](https://github.com/othercorey) in
[https://github.com/vimeo/psalm/pull/9595](https://github.com/vimeo/psalm/pull/9595)
- fix [#&#8203;9049](https://github.com/vimeo/psalm/issues/9049) by
[@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9598](https://github.com/vimeo/psalm/pull/9598)
- fix coercion detection between two keyed arrays by
[@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9606](https://github.com/vimeo/psalm/pull/9606)
- fix: treat includes starting with '.' and '..' correct by
[@&#8203;jjjb03](https://github.com/jjjb03) in
[https://github.com/vimeo/psalm/pull/9608](https://github.com/vimeo/psalm/pull/9608)
- Allow enabling mixed issues reporting for error levels > 2. by
[@&#8203;ADmad](https://github.com/ADmad) in
[https://github.com/vimeo/psalm/pull/9626](https://github.com/vimeo/psalm/pull/9626)
- Preserve `non-empty-string` type when combining literal and numeric
strings by [@&#8203;boesing](https://github.com/boesing) in
[https://github.com/vimeo/psalm/pull/9630](https://github.com/vimeo/psalm/pull/9630)
- Do not report required closure arguments as unused by
[@&#8203;boesing](https://github.com/boesing) in
[https://github.com/vimeo/psalm/pull/9629](https://github.com/vimeo/psalm/pull/9629)
- Fix various db callmaps by
[@&#8203;othercorey](https://github.com/othercorey) in
[https://github.com/vimeo/psalm/pull/9632](https://github.com/vimeo/psalm/pull/9632)
- fix: add missing constructor parameter to IteratorIterator by
[@&#8203;SenseException](https://github.com/SenseException) in
[https://github.com/vimeo/psalm/pull/9646](https://github.com/vimeo/psalm/pull/9646)
- Flatten `match` arm conditions to check conditions independently by
[@&#8203;tuqqu](https://github.com/tuqqu) in
[https://github.com/vimeo/psalm/pull/9647](https://github.com/vimeo/psalm/pull/9647)
- Fixed non empty arg issue in array_splice function by
[@&#8203;whizsid](https://github.com/whizsid) in
[https://github.com/vimeo/psalm/pull/9643](https://github.com/vimeo/psalm/pull/9643)
- Fix `array_flip` to preserve non-empty array type by
[@&#8203;tuqqu](https://github.com/tuqqu) in
[https://github.com/vimeo/psalm/pull/9651](https://github.com/vimeo/psalm/pull/9651)
- Fix list<T> template replacement by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9658](https://github.com/vimeo/psalm/pull/9658)
- Fix iterable template replacement by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9660](https://github.com/vimeo/psalm/pull/9660)
- Fix/9373 using enum property as const array key by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9393](https://github.com/vimeo/psalm/pull/9393)
- Specify array share for `stream_context_get_params` return value by
[@&#8203;lptn](https://github.com/lptn) in
[https://github.com/vimeo/psalm/pull/9663](https://github.com/vimeo/psalm/pull/9663)
- Fixed crash issue when using multiple literals for array_splice by
[@&#8203;whizsid](https://github.com/whizsid) in
[https://github.com/vimeo/psalm/pull/9673](https://github.com/vimeo/psalm/pull/9673)
- Fix comparison of unions of multiple callables by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/9676](https://github.com/vimeo/psalm/pull/9676)
- Add stub for DateInterval by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9682](https://github.com/vimeo/psalm/pull/9682)
- Return a non-empty-(lowercase-)string from mb_strtolower by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9678](https://github.com/vimeo/psalm/pull/9678)
- Don't throw UnnecesseryVarAnnotation when hinting a mixed template var
by [@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9679](https://github.com/vimeo/psalm/pull/9679)
- Fix is_object assertions on final classes by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/9686](https://github.com/vimeo/psalm/pull/9686)
- Add return type provider for date/gmdate by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9691](https://github.com/vimeo/psalm/pull/9691)
- Avoid wrong assertions when working with objects returned by methods
by [@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/9685](https://github.com/vimeo/psalm/pull/9685)
- Handle included directory paths without crashing by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/9701](https://github.com/vimeo/psalm/pull/9701)
- Contextual closure arg inference for class methods by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9700](https://github.com/vimeo/psalm/pull/9700)
- Fix [#&#8203;9692](https://github.com/vimeo/psalm/issues/9692) by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/9693](https://github.com/vimeo/psalm/pull/9693)
- Allow running new on template objects by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/9704](https://github.com/vimeo/psalm/pull/9704)
- Fix date return type provider by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/9711](https://github.com/vimeo/psalm/pull/9711)
- Fix UnevaluatedCode false positive at declare(strict_types=1) by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9719](https://github.com/vimeo/psalm/pull/9719)
- Fix ambiguous constant inheritance false positive by
[@&#8203;Jean85](https://github.com/Jean85) in
[https://github.com/vimeo/psalm/pull/9720](https://github.com/vimeo/psalm/pull/9720)

##### Docs

- Add CLI help for the error-level option by
[@&#8203;dantleech](https://github.com/dantleech) in
[https://github.com/vimeo/psalm/pull/9590](https://github.com/vimeo/psalm/pull/9590)
- Replace `@template T as X` with `@template T of X` in documentation by
[@&#8203;janopae](https://github.com/janopae) in
[https://github.com/vimeo/psalm/pull/9690](https://github.com/vimeo/psalm/pull/9690)
- Make it easier to find how to promote Trace by
[@&#8203;greg0ire](https://github.com/greg0ire) in
[https://github.com/vimeo/psalm/pull/9717](https://github.com/vimeo/psalm/pull/9717)
- Document [@&#8203;mixin](https://github.com/mixin) by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9706](https://github.com/vimeo/psalm/pull/9706)

##### Internal changes

- Bump mheap/github-action-required-labels from 3 to 4 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/vimeo/psalm/pull/9601](https://github.com/vimeo/psalm/pull/9601)
- Avoid verbose opcache logging by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/9670](https://github.com/vimeo/psalm/pull/9670)
- Valid array access on a non-empty-string yields a non-empty-string by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/9675](https://github.com/vimeo/psalm/pull/9675)
- Remove clone leftovers from immutable refactoring by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/9709](https://github.com/vimeo/psalm/pull/9709)

#### New Contributors

- [@&#8203;dantleech](https://github.com/dantleech) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9590](https://github.com/vimeo/psalm/pull/9590)
- [@&#8203;jjjb03](https://github.com/jjjb03) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9608](https://github.com/vimeo/psalm/pull/9608)
- [@&#8203;SenseException](https://github.com/SenseException) made
their first contribution in
[https://github.com/vimeo/psalm/pull/9646](https://github.com/vimeo/psalm/pull/9646)
- [@&#8203;tuqqu](https://github.com/tuqqu) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9647](https://github.com/vimeo/psalm/pull/9647)
- [@&#8203;whizsid](https://github.com/whizsid) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9643](https://github.com/vimeo/psalm/pull/9643)
- [@&#8203;janopae](https://github.com/janopae) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9690](https://github.com/vimeo/psalm/pull/9690)

**Full Changelog**:
vimeo/psalm@5.9.0...5.10.0

### [`v5.9.0`](https://github.com/vimeo/psalm/releases/tag/5.9.0)

[Compare Source](https://github.com/vimeo/psalm/compare/5.8.0...5.9.0)

<!-- Release notes generated using configuration in .github/release.yml
at master -->

#### What's Changed

##### Features

- `json_encode()` returns a non-empty-string with `JSON_THROW_ON_ERROR |
JSON_UNESCAPED_UNICODE` by
[@&#8203;fluffycondor](https://github.com/fluffycondor) in
[https://github.com/vimeo/psalm/pull/9479](https://github.com/vimeo/psalm/pull/9479)
- WIP: Performance/Feature Improvements to the Language Server by
[@&#8203;tm1000](https://github.com/tm1000) in
[https://github.com/vimeo/psalm/pull/8960](https://github.com/vimeo/psalm/pull/8960)
- Support int separators in docblocks by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/9491](https://github.com/vimeo/psalm/pull/9491)
- [@&#8203;property](https://github.com/property) annotations: allow
*not* implying
[@&#8203;psalm-seal-properties](https://github.com/psalm-seal-properties)
by [@&#8203;danielbeardsley](https://github.com/danielbeardsley) in
[https://github.com/vimeo/psalm/pull/9568](https://github.com/vimeo/psalm/pull/9568)
- Improve PHP8 str_\* function signatures by
[@&#8203;fluffycondor](https://github.com/fluffycondor) in
[https://github.com/vimeo/psalm/pull/9534](https://github.com/vimeo/psalm/pull/9534)
- Contextual inference for first-class-callable by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/9570](https://github.com/vimeo/psalm/pull/9570)

##### Fixes

- Compare list generic params by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/9487](https://github.com/vimeo/psalm/pull/9487)
- Add `truthy-string` to reserved word list. by
[@&#8203;ZebulanStanphill](https://github.com/ZebulanStanphill) in
[https://github.com/vimeo/psalm/pull/9486](https://github.com/vimeo/psalm/pull/9486)
- Fix [#&#8203;9433](https://github.com/vimeo/psalm/issues/9433) by
[@&#8203;ptomulik](https://github.com/ptomulik) in
[https://github.com/vimeo/psalm/pull/9439](https://github.com/vimeo/psalm/pull/9439)
- Add missing array, float, int and bool types to callmaps by
[@&#8203;othercorey](https://github.com/othercorey) in
[https://github.com/vimeo/psalm/pull/9474](https://github.com/vimeo/psalm/pull/9474)
- Fix asserted property mangling by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/9507](https://github.com/vimeo/psalm/pull/9507)
- Fix return type of str_split() by
[@&#8203;othercorey](https://github.com/othercorey) in
[https://github.com/vimeo/psalm/pull/9504](https://github.com/vimeo/psalm/pull/9504)
- Fix integer overflow in array keys by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/9499](https://github.com/vimeo/psalm/pull/9499)
- Set inside_call for eval expressions by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/9519](https://github.com/vimeo/psalm/pull/9519)
- Improve json_encode/json_decode functions signatures by
[@&#8203;fluffycondor](https://github.com/fluffycondor) in
[https://github.com/vimeo/psalm/pull/9525](https://github.com/vimeo/psalm/pull/9525)
- Fix MissingThrowsDocblock when documented interface is extended by
thrown exception interface by
[@&#8203;paoloconi96](https://github.com/paoloconi96) in
[https://github.com/vimeo/psalm/pull/9528](https://github.com/vimeo/psalm/pull/9528)
- Fixed [#&#8203;9496](https://github.com/vimeo/psalm/issues/9496) by
[@&#8203;ptomulik](https://github.com/ptomulik) in
[https://github.com/vimeo/psalm/pull/9497](https://github.com/vimeo/psalm/pull/9497)
- Prevent assertion leaks from `else` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/9538](https://github.com/vimeo/psalm/pull/9538)
- Fixed coercion of mixed into non-empty-mixed by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/9541](https://github.com/vimeo/psalm/pull/9541)
- always combine the result of expansions by
[@&#8203;orklah](https://github.com/orklah) in
[https://github.com/vimeo/psalm/pull/9562](https://github.com/vimeo/psalm/pull/9562)
- Clean up unreflectable callmap methods by
[@&#8203;othercorey](https://github.com/othercorey) in
[https://github.com/vimeo/psalm/pull/9526](https://github.com/vimeo/psalm/pull/9526)
- Add better return type to mysqli fetch_field\* by
[@&#8203;MoonE](https://github.com/MoonE) in
[https://github.com/vimeo/psalm/pull/9555](https://github.com/vimeo/psalm/pull/9555)
- \[mysql] Add stubs for `mysqli`, `mysqli_result` and `mysqli_stmt`
classes by [@&#8203;phansys](https://github.com/phansys) in
[https://github.com/vimeo/psalm/pull/9547](https://github.com/vimeo/psalm/pull/9547)
- Fix array_unique callmap by
[@&#8203;othercorey](https://github.com/othercorey) in
[https://github.com/vimeo/psalm/pull/9323](https://github.com/vimeo/psalm/pull/9323)
- Improve types for range() by
[@&#8203;kamil-tekiela](https://github.com/kamil-tekiela) in
[https://github.com/vimeo/psalm/pull/9577](https://github.com/vimeo/psalm/pull/9577)
- Fixed [#&#8203;9506](https://github.com/vimeo/psalm/issues/9506) by
[@&#8203;ptomulik](https://github.com/ptomulik) in
[https://github.com/vimeo/psalm/pull/9509](https://github.com/vimeo/psalm/pull/9509)
- Handle different line endings from baseline. by
[@&#8203;DnwK98](https://github.com/DnwK98) in
[https://github.com/vimeo/psalm/pull/9566](https://github.com/vimeo/psalm/pull/9566)

##### Docs

- Doc/psalm api on methods by
[@&#8203;ygottschalk](https://github.com/ygottschalk) in
[https://github.com/vimeo/psalm/pull/9544](https://github.com/vimeo/psalm/pull/9544)

##### Internal changes

- Optimize composer caching by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/9493](https://github.com/vimeo/psalm/pull/9493)
- Update phar-build to large resource class in config.yml by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/9494](https://github.com/vimeo/psalm/pull/9494)
- Refuse to use PHP versions we did not request by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/9492](https://github.com/vimeo/psalm/pull/9492)
- Make Atomic subclasses consistently call their parent constructors by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/9406](https://github.com/vimeo/psalm/pull/9406)
- Remove always-empty ClassAnalyzer leftover_stmts array by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/9522](https://github.com/vimeo/psalm/pull/9522)
- Skip gnupg extension in callmap tests by
[@&#8203;othercorey](https://github.com/othercorey) in
[https://github.com/vimeo/psalm/pull/9576](https://github.com/vimeo/psalm/pull/9576)

#### New Contributors

- [@&#8203;ZebulanStanphill](https://github.com/ZebulanStanphill) made
their first contribution in
[https://github.com/vimeo/psalm/pull/9486](https://github.com/vimeo/psalm/pull/9486)
- [@&#8203;paoloconi96](https://github.com/paoloconi96) made their
first contribution in
[https://github.com/vimeo/psalm/pull/9528](https://github.com/vimeo/psalm/pull/9528)
- [@&#8203;MoonE](https://github.com/MoonE) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9555](https://github.com/vimeo/psalm/pull/9555)
- [@&#8203;danielbeardsley](https://github.com/danielbeardsley) made
their first contribution in
[https://github.com/vimeo/psalm/pull/9568](https://github.com/vimeo/psalm/pull/9568)
- [@&#8203;DnwK98](https://github.com/DnwK98) made their first
contribution in
[https://github.com/vimeo/psalm/pull/9566](https://github.com/vimeo/psalm/pull/9566)

**Full Changelog**: vimeo/psalm@5.8.0...5.9.0

</details>

---

### 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.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-feature/php-sdk).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4yMi4xIiwidXBkYXRlZEluVmVyIjoiMzYuMjQuMiIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
release:internal The PR will be included in 'Internal changes' section of the release notes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants