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

Forbid iterating over generators with non-nullable send() #10697

Conversation

weirdan
Copy link
Collaborator

@weirdan weirdan commented Feb 12, 2024

Fixes #6985

@weirdan weirdan added the release:feature The PR will be included in 'Features' section of the release notes label Feb 12, 2024
@weirdan weirdan requested review from danog and orklah February 12, 2024 04:15
@weirdan
Copy link
Collaborator Author

weirdan commented Feb 12, 2024

Some failures look valid, including the test-with-real-projects/PSL, as declaring TSend as void seems wrong. TSend is used as both the send() parameter type and the yield return type, and void as a parameter type is rather misleading. Also, as described in the linked issue, foreach() invokes send(null) during iteration, so a generator with TSend=void is rather useless - it cannot be iterated over.

/cc: @azjezz

@weirdan weirdan marked this pull request as draft February 12, 2024 04:35
@weirdan
Copy link
Collaborator Author

weirdan commented Feb 12, 2024

The only remaining failures are for Generator<..., ..., void, ...> - we have to decide whether we want to allow that (and treat it as null) or reject it (see above).

@weirdan weirdan marked this pull request as ready for review February 12, 2024 06:57
@orklah
Copy link
Collaborator

orklah commented Feb 15, 2024

I may be wrong on that, but I believe Psalter itself used to (or still) generate signature with void generators like that

Anyway, maybe we could mimic the behavior of phpstan for this?

I don't see the need of creating one more difference for such a niche case.

@weirdan
Copy link
Collaborator Author

weirdan commented Feb 15, 2024

Anyway, maybe we could mimic the behavior of phpstan for this?

PHPStan doesn't flag iteration over Generator<..., ..., void, ...>, but not because it special cases void, but because it's not aware that foreach invokes send(null): https://phpstan.org/r/86c02395-e906-4493-a354-99a39d135323, https://3v4l.org/ONh6K

Just like Psalm before this pull request.

@ondrejmirtes WDYT?

My preferred approach, I think, would be to allow people to shoot themselves in the foot specify Generator<..., ..., void, ...> for the time being but then flag all iterations over this generator. Then in a couple of years start flagging Generator<..., ..., void, ...> just like we flag @param void now.

@weirdan
Copy link
Collaborator Author

weirdan commented Feb 26, 2024

I'm generally satisfied with how it works now.

@veewee heads up, this will break PSL because Awaitable::iterate() produces a generator that nominally cannot be iterated over:
https://github.com/azjezz/psl/blob/b85e5e1c8e2385bf108bb3a09fb36b459dbc1a07/src/Psl/Async/Awaitable.php#L52-L54

@veewee
Copy link
Contributor

veewee commented Feb 26, 2024

Thanks for the heads-up. It should be fixed in azjezz/psl#444

weirdan added a commit to psalm/endtoend-test-psl that referenced this pull request Feb 26, 2024
Even though `Generator::current()` can return `null` once generator is
exhausted, `foreach()` never iterates after iterator ends, so we can
safely remove `null` (unless, of course, generator can yield `null`).
@weirdan weirdan force-pushed the forbid-iterating-over-generators-with-non-nullable-send branch from a95f7a1 to 0ce62a5 Compare February 27, 2024 00:04
@weirdan weirdan merged commit a1352eb into vimeo:5.x Feb 27, 2024
50 checks passed
@weirdan weirdan deleted the forbid-iterating-over-generators-with-non-nullable-send branch February 27, 2024 00:10
oguzhand95 referenced this pull request in cerbos/cerbos-sdk-php Mar 11, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [phpstan/phpstan](https://github.com/phpstan/phpstan) | `1.10.59` ->
`1.10.60` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/phpstan%2fphpstan/1.10.60?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/phpstan%2fphpstan/1.10.60?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/phpstan%2fphpstan/1.10.59/1.10.60?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/phpstan%2fphpstan/1.10.59/1.10.60?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [phpunit/phpunit](https://phpunit.de/)
([source](https://github.com/sebastianbergmann/phpunit)) | `10.5.11`
-> `10.5.12` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/phpunit%2fphpunit/10.5.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/phpunit%2fphpunit/10.5.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/phpunit%2fphpunit/10.5.11/10.5.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/phpunit%2fphpunit/10.5.11/10.5.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [vimeo/psalm](https://github.com/vimeo/psalm) | `5.22.2` -> `5.23.0`
|
[![age](https://developer.mend.io/api/mc/badges/age/packagist/vimeo%2fpsalm/5.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/vimeo%2fpsalm/5.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/vimeo%2fpsalm/5.22.2/5.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/vimeo%2fpsalm/5.22.2/5.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

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

[Compare
Source](https://github.com/phpstan/phpstan/compare/1.10.59...1.10.60)

[**Learn more about this
release**](https://phpstan.org/blog/enhancements-in-handling-parameters-passed-by-reference)
in an article on phpstan.org!

# Major new features 🚀

- Generic `@method` tags: `@method T doFoo<T>(T $p)`,
[#&#8203;6371](https://github.com/phpstan/phpstan/issues/6371)
- [Learn
more](https://twitter.com/OndrejMirtes/status/1760994823073370509)
- [#&#8203;2931](https://github.com/phpstan/phpstan-src/pull/2931),
[#&#8203;2935](https://github.com/phpstan/phpstan-src/pull/2935),
thanks [@&#8203;mad-briller](https://github.com/mad-briller)!
- Generic callable types: `callable<T>(T): T`,
[#&#8203;8964](https://github.com/phpstan/phpstan/issues/8964)
- [#&#8203;2938](https://github.com/phpstan/phpstan-src/pull/2938),
[#&#8203;2945](https://github.com/phpstan/phpstan-src/pull/2945),
[#&#8203;2946](https://github.com/phpstan/phpstan-src/pull/2946),
thanks [@&#8203;mad-briller](https://github.com/mad-briller)!
- Error on references of prefixed internal class names from PHAR files
([#&#8203;2932](https://github.com/phpstan/phpstan-src/pull/2932)),
thanks [@&#8203;staabm](https://github.com/staabm)!

# Bleeding edge 🔪

-   **Enhancements in Handling Parameters Passed by Reference**
- [Learn more on
phpstan.org](https://phpstan.org/blog/enhancements-in-handling-parameters-passed-by-reference)
- [#&#8203;2941](https://github.com/phpstan/phpstan-src/pull/2941),
thanks [@&#8203;ljmaskey](https://github.com/ljmaskey)!
- Add option `reportAnyTypeWideningInVarTag`
([#&#8203;2840](https://github.com/phpstan/phpstan-src/pull/2840)),
thanks [@&#8203;janedbal](https://github.com/janedbal)!

*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 support for constructor assertions
([#&#8203;2950](https://github.com/phpstan/phpstan-src/pull/2950)),
[#&#8203;10645](https://github.com/phpstan/phpstan/issues/10645),
thanks [@&#8203;axlon](https://github.com/axlon)!
- Report uses of deprecated constants
([#&#8203;2953](https://github.com/phpstan/phpstan-src/pull/2953)),
thanks [@&#8203;staabm](https://github.com/staabm)!

# Bugfixes 🐛

- Fix how union of callables is understood
([#&#8203;2902](https://github.com/phpstan/phpstan-src/pull/2902)),
[#&#8203;10442](https://github.com/phpstan/phpstan/issues/10442),
thanks [@&#8203;mad-briller](https://github.com/mad-briller)!
- Fix for inferring closure parameter type from callable union
(phpstan/phpstan-src@c10476d)
- ArrayType - string offset might exist as integer offset
([#&#8203;2928](https://github.com/phpstan/phpstan-src/pull/2928)),
[#&#8203;10610](https://github.com/phpstan/phpstan/issues/10610),
thanks [@&#8203;michalbundyra](https://github.com/michalbundyra)!
- Truncate description of huge UnionType
(phpstan/phpstan-src@039a3dc),
[#&#8203;10614](https://github.com/phpstan/phpstan/issues/10614)
- fix type of `$a?->b::c()` and `$a?->b::$c`
([#&#8203;2933](https://github.com/phpstan/phpstan-src/pull/2933)),
thanks [@&#8203;schlndh](https://github.com/schlndh)!
- fix `fn() => __FUNCTION__` and `__METHOD__`
([#&#8203;2934](https://github.com/phpstan/phpstan-src/pull/2934)),
thanks [@&#8203;schlndh](https://github.com/schlndh)!
- Some sort functions do not preserve a list
(phpstan/phpstan-src@034f731,
phpstan/phpstan-src@0977a7b),
[#&#8203;10627](https://github.com/phpstan/phpstan/issues/10627)
- ArgumentsNormalizer - keep named arguments for unknown parameters
(phpstan/phpstan-src@ad34452),
[#&#8203;10628](https://github.com/phpstan/phpstan/issues/10628)
- Check `T of mixed&Foo` and `T of mixed|Foo`
([#&#8203;2940](https://github.com/phpstan/phpstan-src/pull/2940)),
thanks [@&#8203;schlndh](https://github.com/schlndh)!
- Use narrowed conditional type if/else types for subtype checks
([#&#8203;2948](https://github.com/phpstan/phpstan-src/pull/2948)),
[#&#8203;10622](https://github.com/phpstan/phpstan/issues/10622),
thanks [@&#8203;rvanvelzen](https://github.com/rvanvelzen)!
- Fix `isSuperTypeOf` of callable/Closure when parameter count differ
([#&#8203;2949](https://github.com/phpstan/phpstan-src/pull/2949)),
[#&#8203;10594](https://github.com/phpstan/phpstan/issues/10594),
thanks [@&#8203;takaram](https://github.com/takaram)!

# Function signature fixes 🤖

- Fix `ReflectionFunctionAbstract::getExtension` return type
(phpstan/phpstan-src@2ece1f8)
- Correct return type of `date_sun_info()` function
([#&#8203;2947](https://github.com/phpstan/phpstan-src/pull/2947)),
thanks [@&#8203;zonuexe](https://github.com/zonuexe)!
- Fix return values of `mysqli get_warnings`
([#&#8203;2929](https://github.com/phpstan/phpstan-src/pull/2929)),
thanks [@&#8203;janedbal](https://github.com/janedbal)!

# Internals 🔍

- Replace composer-require-checker with composer-dependency-analyser
([#&#8203;2875](https://github.com/phpstan/phpstan-src/pull/2875)),
thanks [@&#8203;janedbal](https://github.com/janedbal)!
- Use `Type::isNull()` in `Nullsafe(MethodCall|PropertyFetch)Rule`
([#&#8203;2942](https://github.com/phpstan/phpstan-src/pull/2942)),
thanks [@&#8203;takaram](https://github.com/takaram)!

</details>

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

###
[`v10.5.12`](https://github.com/sebastianbergmann/phpunit/releases/tag/10.5.12)

[Compare
Source](https://github.com/sebastianbergmann/phpunit/compare/10.5.11...10.5.12)

##### Fixed

-
[#&#8203;5652](https://github.com/sebastianbergmann/phpunit/issues/5652):
`HRTime::duration()` throws `InvalidArgumentException`

***

[How to install or update
PHPUnit](https://docs.phpunit.de/en/10.5/installation.html)

</details>

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

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.22.2...5.23.0)

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

#### What's Changed

##### Features

- Update PHP 8.2 stubs to include `SensitiveParameterValue` by
[@&#8203;gsteel](https://github.com/gsteel) in
[https://github.com/vimeo/psalm/pull/10726](https://github.com/vimeo/psalm/pull/10726)
- Add list of statements to BeforeFileAnalysisEvent by
[@&#8203;ohader](https://github.com/ohader) in
[https://github.com/vimeo/psalm/pull/10728](https://github.com/vimeo/psalm/pull/10728)
- Forbid iterating over generators with non-nullable `send()` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10697](https://github.com/vimeo/psalm/pull/10697)
- Initial support for named parameters for callables by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10772](https://github.com/vimeo/psalm/pull/10772)

##### Fixes

- Improve randomizer stubs by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10709](https://github.com/vimeo/psalm/pull/10709)
- Fix detecting magic static methods by
[@&#8203;issidorov](https://github.com/issidorov) in
[https://github.com/vimeo/psalm/pull/10704](https://github.com/vimeo/psalm/pull/10704)
- Fix non-empty-lowercase-string handling with literal non-lowercase
strings by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10722](https://github.com/vimeo/psalm/pull/10722)
- Fix RiskyTruthyFalsyComparison irrelevant errors when there is no
explicit truthy/falsy type by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10733](https://github.com/vimeo/psalm/pull/10733)
- Allow `Override` attribute to be used in pure contexts by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10734](https://github.com/vimeo/psalm/pull/10734)
- Revert "Allow tainted numerics except for 'html' and 'has_quotes'" by
[@&#8203;ohader](https://github.com/ohader) in
[https://github.com/vimeo/psalm/pull/10729](https://github.com/vimeo/psalm/pull/10729)
- Fix loading stubs from phar file on Windows by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10748](https://github.com/vimeo/psalm/pull/10748)
- Fix a false flag issue with InvalidConstantAssignmentValue by
[@&#8203;MelechMizrachi](https://github.com/MelechMizrachi) in
[https://github.com/vimeo/psalm/pull/10738](https://github.com/vimeo/psalm/pull/10738)
- Set inside_isset false when analyzing ArrayDimFetch index by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10752](https://github.com/vimeo/psalm/pull/10752)
- Set inside_isset = false when analyzing arguments by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10753](https://github.com/vimeo/psalm/pull/10753)
- Fix PHP notice - crash on invalid taint-escape by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10760](https://github.com/vimeo/psalm/pull/10760)
- Fix version comparison for `@since` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10764](https://github.com/vimeo/psalm/pull/10764)
- Since annotations outside phpstub should not infer php version by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10769](https://github.com/vimeo/psalm/pull/10769)
- Backport `WeakMap` iterator fix from `master` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10778](https://github.com/vimeo/psalm/pull/10778)
- Namespace anonymous classes by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10779](https://github.com/vimeo/psalm/pull/10779)
- Update CallMap for sqlsrv_connect and sqlsrv_errors to match
reflection by [@&#8203;theodorejb](https://github.com/theodorejb) in
[https://github.com/vimeo/psalm/pull/10781](https://github.com/vimeo/psalm/pull/10781)
- `$resource` parameter of `mkdir()` is nullable since PHP 7.3 by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10802](https://github.com/vimeo/psalm/pull/10802)
- Use wider class-string when combining class strings with intersections
by [@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10800](https://github.com/vimeo/psalm/pull/10800)

##### Internal changes

- Use TaintKind/TaintKindGroup constants instead of string values by
[@&#8203;ohader](https://github.com/ohader) in
[https://github.com/vimeo/psalm/pull/10746](https://github.com/vimeo/psalm/pull/10746)
- Skip symlink test on Windows by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10749](https://github.com/vimeo/psalm/pull/10749)
- Avoid duplicating code for RiskyTruthyFalsyComparison by
[@&#8203;theodorejb](https://github.com/theodorejb) in
[https://github.com/vimeo/psalm/pull/10765](https://github.com/vimeo/psalm/pull/10765)
- fix PHP 8 tests running with wrong --php-version=/phpVersion= if not
explicitly specified by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10776](https://github.com/vimeo/psalm/pull/10776)
- CS fix by [@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10801](https://github.com/vimeo/psalm/pull/10801)

#### New Contributors

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

**Full Changelog**:
vimeo/psalm@5.22.2...5.23.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:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMzAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIzMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

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>
Gashmob referenced this pull request in Gashmob/project-templates Mar 18, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [vimeo/psalm](https://github.com/vimeo/psalm) | `5.22.1` -> `5.23.1`
|
[![age](https://developer.mend.io/api/mc/badges/age/packagist/vimeo%2fpsalm/5.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/vimeo%2fpsalm/5.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/vimeo%2fpsalm/5.22.1/5.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/vimeo%2fpsalm/5.22.1/5.23.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.23.0...5.23.1)

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

#### What's Changed

##### Fixes

- Fixed analysis of existing static methods if the `__callStatic()`
method exists by [@&#8203;issidorov](https://github.com/issidorov) in
[https://github.com/vimeo/psalm/pull/10812](https://github.com/vimeo/psalm/pull/10812)

**Full Changelog**:
vimeo/psalm@5.23.0...5.23.1

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.22.2...5.23.0)

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

#### What's Changed

##### Features

- Update PHP 8.2 stubs to include `SensitiveParameterValue` by
[@&#8203;gsteel](https://github.com/gsteel) in
[https://github.com/vimeo/psalm/pull/10726](https://github.com/vimeo/psalm/pull/10726)
- Add list of statements to BeforeFileAnalysisEvent by
[@&#8203;ohader](https://github.com/ohader) in
[https://github.com/vimeo/psalm/pull/10728](https://github.com/vimeo/psalm/pull/10728)
- Forbid iterating over generators with non-nullable `send()` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10697](https://github.com/vimeo/psalm/pull/10697)
- Initial support for named parameters for callables by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10772](https://github.com/vimeo/psalm/pull/10772)

##### Fixes

- Improve randomizer stubs by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10709](https://github.com/vimeo/psalm/pull/10709)
- Fix detecting magic static methods by
[@&#8203;issidorov](https://github.com/issidorov) in
[https://github.com/vimeo/psalm/pull/10704](https://github.com/vimeo/psalm/pull/10704)
- Fix non-empty-lowercase-string handling with literal non-lowercase
strings by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10722](https://github.com/vimeo/psalm/pull/10722)
- Fix RiskyTruthyFalsyComparison irrelevant errors when there is no
explicit truthy/falsy type by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10733](https://github.com/vimeo/psalm/pull/10733)
- Allow `Override` attribute to be used in pure contexts by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10734](https://github.com/vimeo/psalm/pull/10734)
- Revert "Allow tainted numerics except for 'html' and 'has_quotes'" by
[@&#8203;ohader](https://github.com/ohader) in
[https://github.com/vimeo/psalm/pull/10729](https://github.com/vimeo/psalm/pull/10729)
- Fix loading stubs from phar file on Windows by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10748](https://github.com/vimeo/psalm/pull/10748)
- Fix a false flag issue with InvalidConstantAssignmentValue by
[@&#8203;MelechMizrachi](https://github.com/MelechMizrachi) in
[https://github.com/vimeo/psalm/pull/10738](https://github.com/vimeo/psalm/pull/10738)
- Set inside_isset false when analyzing ArrayDimFetch index by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10752](https://github.com/vimeo/psalm/pull/10752)
- Set inside_isset = false when analyzing arguments by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10753](https://github.com/vimeo/psalm/pull/10753)
- Fix PHP notice - crash on invalid taint-escape by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10760](https://github.com/vimeo/psalm/pull/10760)
- Fix version comparison for `@since` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10764](https://github.com/vimeo/psalm/pull/10764)
- Since annotations outside phpstub should not infer php version by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10769](https://github.com/vimeo/psalm/pull/10769)
- Backport `WeakMap` iterator fix from `master` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10778](https://github.com/vimeo/psalm/pull/10778)
- Namespace anonymous classes by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10779](https://github.com/vimeo/psalm/pull/10779)
- Update CallMap for sqlsrv_connect and sqlsrv_errors to match
reflection by [@&#8203;theodorejb](https://github.com/theodorejb) in
[https://github.com/vimeo/psalm/pull/10781](https://github.com/vimeo/psalm/pull/10781)
- `$resource` parameter of `mkdir()` is nullable since PHP 7.3 by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10802](https://github.com/vimeo/psalm/pull/10802)
- Use wider class-string when combining class strings with intersections
by [@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10800](https://github.com/vimeo/psalm/pull/10800)

##### Internal changes

- Use TaintKind/TaintKindGroup constants instead of string values by
[@&#8203;ohader](https://github.com/ohader) in
[https://github.com/vimeo/psalm/pull/10746](https://github.com/vimeo/psalm/pull/10746)
- Skip symlink test on Windows by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10749](https://github.com/vimeo/psalm/pull/10749)
- Avoid duplicating code for RiskyTruthyFalsyComparison by
[@&#8203;theodorejb](https://github.com/theodorejb) in
[https://github.com/vimeo/psalm/pull/10765](https://github.com/vimeo/psalm/pull/10765)
- fix PHP 8 tests running with wrong --php-version=/phpVersion= if not
explicitly specified by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10776](https://github.com/vimeo/psalm/pull/10776)
- CS fix by [@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10801](https://github.com/vimeo/psalm/pull/10801)

#### New Contributors

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

**Full Changelog**:
vimeo/psalm@5.22.2...5.23.0

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.22.1...5.22.2)

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

#### What's Changed

##### Fixes

- Catch missing classlike exceptions during scanning by
[@&#8203;weirdan](https://github.com/weirdan) and
[@&#8203;ohader](https://github.com/ohader) in
[https://github.com/vimeo/psalm/pull/10720](https://github.com/vimeo/psalm/pull/10720)

**Full Changelog**:
vimeo/psalm@5.22.1...5.22.2

</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/Gashmob/project-templates).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIzMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIn0=-->
tcarrio referenced this pull request in open-feature/php-sdk May 7, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [vimeo/psalm](https://github.com/vimeo/psalm) | `~5.17.0` ->
`~5.24.0` |
[![age](https://developer.mend.io/api/mc/badges/age/packagist/vimeo%2fpsalm/5.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/packagist/vimeo%2fpsalm/5.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/packagist/vimeo%2fpsalm/5.17.0/5.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/vimeo%2fpsalm/5.17.0/5.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.23.1...5.24.0)

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

#### What's Changed

##### Features

- Allow specifying flags to Codebase::isTypeContainedByType by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10829](https://github.com/vimeo/psalm/pull/10829)
- Allow more callable types as subtypes of `callable` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10805](https://github.com/vimeo/psalm/pull/10805)
- Report `parent` being used in callable context when the class does not
extend anything by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10838](https://github.com/vimeo/psalm/pull/10838)
- Report error for additional deprecated arg types in PHP 8.1/8.3 by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10824](https://github.com/vimeo/psalm/pull/10824)
- Add MissingClassConstType Issue by
[@&#8203;jack-worman](https://github.com/jack-worman) in
[https://github.com/vimeo/psalm/pull/10828](https://github.com/vimeo/psalm/pull/10828)
- Enforce parameter names for consistent constructors by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10821](https://github.com/vimeo/psalm/pull/10821)
- Add misc missing errors for invalid callable methods by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10839](https://github.com/vimeo/psalm/pull/10839)

##### Fixes

- Forbid named arguments for ArrayAcccess methods by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10804](https://github.com/vimeo/psalm/pull/10804)
- Don't crash on invalid templates by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10806](https://github.com/vimeo/psalm/pull/10806)
- report error for single param name mismatch too since named args can
even be used then by [@&#8203;kkmuffme](https://github.com/kkmuffme)
in
[https://github.com/vimeo/psalm/pull/10822](https://github.com/vimeo/psalm/pull/10822)
- add support for named arguments for filter_var and filter_input by
[@&#8203;pilif](https://github.com/pilif) in
[https://github.com/vimeo/psalm/pull/10815](https://github.com/vimeo/psalm/pull/10815)
- When inside isset, make array fetch result nullable by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10756](https://github.com/vimeo/psalm/pull/10756)
- Promoted properties missing in extended \__construct should report
PropertyNotSetInConstructor by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10817](https://github.com/vimeo/psalm/pull/10817)
- Updating signature of `getmxrr()` by
[@&#8203;ThomasLandauer](https://github.com/ThomasLandauer) in
[https://github.com/vimeo/psalm/pull/10847](https://github.com/vimeo/psalm/pull/10847)
- Improve string-int juggle consistency in array keys and display for
int-like strings in type by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10814](https://github.com/vimeo/psalm/pull/10814)
- Fix storage not available in thread for intersection doc types by
[@&#8203;simonberger](https://github.com/simonberger) in
[https://github.com/vimeo/psalm/pull/10856](https://github.com/vimeo/psalm/pull/10856)
- Don't emit MissingOverrideAttribute for implicit Stringable
implementations by [@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10858](https://github.com/vimeo/psalm/pull/10858)
- Specify array return type of session_get_cookie_params by
[@&#8203;jorgsowa](https://github.com/jorgsowa) in
[https://github.com/vimeo/psalm/pull/10859](https://github.com/vimeo/psalm/pull/10859)
- Unknown [@&#8203;psalm](https://github.com/psalm) annotation should
not make whole docblock invalid by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10885](https://github.com/vimeo/psalm/pull/10885)
- Add `mail` to impure functions list by
[@&#8203;smaddock](https://github.com/smaddock) in
[https://github.com/vimeo/psalm/pull/10923](https://github.com/vimeo/psalm/pull/10923)
- Update PHP 8.2 Call map delta with refined types for string comparison
functions by [@&#8203;gsteel](https://github.com/gsteel) in
[https://github.com/vimeo/psalm/pull/10883](https://github.com/vimeo/psalm/pull/10883)

##### Docs

- document that
[@&#8203;psalm-internal](https://github.com/psalm-internal) works for
namespace + class too by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10866](https://github.com/vimeo/psalm/pull/10866)

##### Internal changes

- fix tests running with other than called PHP binary if called with a
non-default PHP binary by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10842](https://github.com/vimeo/psalm/pull/10842)
- Explicitly set value in config to fix warning in tests by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10843](https://github.com/vimeo/psalm/pull/10843)
- \[PHP 8.4] Fixes for implicit nullability deprecation by
[@&#8203;Ayesh](https://github.com/Ayesh) in
[https://github.com/vimeo/psalm/pull/10832](https://github.com/vimeo/psalm/pull/10832)
- Throw exception instead of silently logging issues occurred during
scan by [@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10902](https://github.com/vimeo/psalm/pull/10902)

##### Other changes

- Fix conditional on non empty literal string by
[@&#8203;VincentLanglet](https://github.com/VincentLanglet) in
[https://github.com/vimeo/psalm/pull/10912](https://github.com/vimeo/psalm/pull/10912)
- Ignore jsonSerialize for implementors of JsonSerializable by
[@&#8203;josephwynn-sc](https://github.com/josephwynn-sc) in
[https://github.com/vimeo/psalm/pull/10891](https://github.com/vimeo/psalm/pull/10891)
- Add XML functions to ImpureFunctionsList
[#&#8203;10882](https://github.com/vimeo/psalm/issues/10882) by
[@&#8203;DKhalil](https://github.com/DKhalil) in
[https://github.com/vimeo/psalm/pull/10887](https://github.com/vimeo/psalm/pull/10887)

#### New Contributors

- [@&#8203;Ayesh](https://github.com/Ayesh) made their first
contribution in
[https://github.com/vimeo/psalm/pull/10832](https://github.com/vimeo/psalm/pull/10832)
- [@&#8203;smaddock](https://github.com/smaddock) made their first
contribution in
[https://github.com/vimeo/psalm/pull/10923](https://github.com/vimeo/psalm/pull/10923)
- [@&#8203;josephwynn-sc](https://github.com/josephwynn-sc) made their
first contribution in
[https://github.com/vimeo/psalm/pull/10891](https://github.com/vimeo/psalm/pull/10891)
- [@&#8203;DKhalil](https://github.com/DKhalil) made their first
contribution in
[https://github.com/vimeo/psalm/pull/10887](https://github.com/vimeo/psalm/pull/10887)

**Full Changelog**:
vimeo/psalm@5.23.1...5.24.0

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.23.0...5.23.1)

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

#### What's Changed

##### Fixes

- Fixed analysis of existing static methods if the `__callStatic()`
method exists by [@&#8203;issidorov](https://github.com/issidorov) in
[https://github.com/vimeo/psalm/pull/10812](https://github.com/vimeo/psalm/pull/10812)

**Full Changelog**:
vimeo/psalm@5.23.0...5.23.1

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.22.2...5.23.0)

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

#### What's Changed

##### Features

- Update PHP 8.2 stubs to include `SensitiveParameterValue` by
[@&#8203;gsteel](https://github.com/gsteel) in
[https://github.com/vimeo/psalm/pull/10726](https://github.com/vimeo/psalm/pull/10726)
- Add list of statements to BeforeFileAnalysisEvent by
[@&#8203;ohader](https://github.com/ohader) in
[https://github.com/vimeo/psalm/pull/10728](https://github.com/vimeo/psalm/pull/10728)
- Forbid iterating over generators with non-nullable `send()` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10697](https://github.com/vimeo/psalm/pull/10697)
- Initial support for named parameters for callables by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10772](https://github.com/vimeo/psalm/pull/10772)

##### Fixes

- Improve randomizer stubs by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10709](https://github.com/vimeo/psalm/pull/10709)
- Fix detecting magic static methods by
[@&#8203;issidorov](https://github.com/issidorov) in
[https://github.com/vimeo/psalm/pull/10704](https://github.com/vimeo/psalm/pull/10704)
- Fix non-empty-lowercase-string handling with literal non-lowercase
strings by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10722](https://github.com/vimeo/psalm/pull/10722)
- Fix RiskyTruthyFalsyComparison irrelevant errors when there is no
explicit truthy/falsy type by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10733](https://github.com/vimeo/psalm/pull/10733)
- Allow `Override` attribute to be used in pure contexts by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10734](https://github.com/vimeo/psalm/pull/10734)
- Revert "Allow tainted numerics except for 'html' and 'has_quotes'" by
[@&#8203;ohader](https://github.com/ohader) in
[https://github.com/vimeo/psalm/pull/10729](https://github.com/vimeo/psalm/pull/10729)
- Fix loading stubs from phar file on Windows by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10748](https://github.com/vimeo/psalm/pull/10748)
- Fix a false flag issue with InvalidConstantAssignmentValue by
[@&#8203;MelechMizrachi](https://github.com/MelechMizrachi) in
[https://github.com/vimeo/psalm/pull/10738](https://github.com/vimeo/psalm/pull/10738)
- Set inside_isset false when analyzing ArrayDimFetch index by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10752](https://github.com/vimeo/psalm/pull/10752)
- Set inside_isset = false when analyzing arguments by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10753](https://github.com/vimeo/psalm/pull/10753)
- Fix PHP notice - crash on invalid taint-escape by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10760](https://github.com/vimeo/psalm/pull/10760)
- Fix version comparison for `@since` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10764](https://github.com/vimeo/psalm/pull/10764)
- Since annotations outside phpstub should not infer php version by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10769](https://github.com/vimeo/psalm/pull/10769)
- Backport `WeakMap` iterator fix from `master` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10778](https://github.com/vimeo/psalm/pull/10778)
- Namespace anonymous classes by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10779](https://github.com/vimeo/psalm/pull/10779)
- Update CallMap for sqlsrv_connect and sqlsrv_errors to match
reflection by [@&#8203;theodorejb](https://github.com/theodorejb) in
[https://github.com/vimeo/psalm/pull/10781](https://github.com/vimeo/psalm/pull/10781)
- `$resource` parameter of `mkdir()` is nullable since PHP 7.3 by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10802](https://github.com/vimeo/psalm/pull/10802)
- Use wider class-string when combining class strings with intersections
by [@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10800](https://github.com/vimeo/psalm/pull/10800)

##### Internal changes

- Use TaintKind/TaintKindGroup constants instead of string values by
[@&#8203;ohader](https://github.com/ohader) in
[https://github.com/vimeo/psalm/pull/10746](https://github.com/vimeo/psalm/pull/10746)
- Skip symlink test on Windows by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10749](https://github.com/vimeo/psalm/pull/10749)
- Avoid duplicating code for RiskyTruthyFalsyComparison by
[@&#8203;theodorejb](https://github.com/theodorejb) in
[https://github.com/vimeo/psalm/pull/10765](https://github.com/vimeo/psalm/pull/10765)
- fix PHP 8 tests running with wrong --php-version=/phpVersion= if not
explicitly specified by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10776](https://github.com/vimeo/psalm/pull/10776)
- CS fix by [@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10801](https://github.com/vimeo/psalm/pull/10801)

#### New Contributors

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

**Full Changelog**:
vimeo/psalm@5.22.2...5.23.0

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.22.1...5.22.2)

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

#### What's Changed

##### Fixes

- Catch missing classlike exceptions during scanning by
[@&#8203;weirdan](https://github.com/weirdan) and
[@&#8203;ohader](https://github.com/ohader) in
[https://github.com/vimeo/psalm/pull/10720](https://github.com/vimeo/psalm/pull/10720)

**Full Changelog**:
vimeo/psalm@5.22.1...5.22.2

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.22.0...5.22.1)

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

#### What's Changed

##### Fixes

- Improve parsing of `@psalm-type` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10713](https://github.com/vimeo/psalm/pull/10713)

**Full Changelog**:
vimeo/psalm@5.22.0...5.22.1

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.21.1...5.22.0)

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

#### What's Changed

##### Features

- Allow inline comments in typedef shapes by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10623](https://github.com/vimeo/psalm/pull/10623)
- allow typedef imports from any kind of classlike by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10625](https://github.com/vimeo/psalm/pull/10625)
- Allow enum cases to be global constants by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10634](https://github.com/vimeo/psalm/pull/10634)
- New InvalidOverride issue for Override attribute by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10644](https://github.com/vimeo/psalm/pull/10644)
- Analyze dynamic names for static property and const fetches by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10629](https://github.com/vimeo/psalm/pull/10629)
- New MissingOverrideAttribute issue by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10651](https://github.com/vimeo/psalm/pull/10651)
- Flag `stdClass::__construct()` calls that have arguments by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10661](https://github.com/vimeo/psalm/pull/10661)
- Improve Reflection stubs by
[@&#8203;vudaltsov](https://github.com/vudaltsov) in
[https://github.com/vimeo/psalm/pull/10091](https://github.com/vimeo/psalm/pull/10091)
- Forbid constructors from returning any values by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10686](https://github.com/vimeo/psalm/pull/10686)
- Report first class callables generated for unknown static methods by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10691](https://github.com/vimeo/psalm/pull/10691)
- Process `@psalm-this-out` on `__construct()` as well by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10690](https://github.com/vimeo/psalm/pull/10690)
- Report invalid number of arguments for psalm-taint-\* by
[@&#8203;staabm](https://github.com/staabm) in
[https://github.com/vimeo/psalm/pull/10699](https://github.com/vimeo/psalm/pull/10699)

##### Fixes

- Fix ownerDocument type in dom-ext classes by
[@&#8203;fluffycondor](https://github.com/fluffycondor) in
[https://github.com/vimeo/psalm/pull/10619](https://github.com/vimeo/psalm/pull/10619)
- Fix numeric scalar validate filter var input return type wrong by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10621](https://github.com/vimeo/psalm/pull/10621)
- Stable baseline by [@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10633](https://github.com/vimeo/psalm/pull/10633)
- Allow sebastian/diff v6 by
[@&#8203;simPod](https://github.com/simPod) in
[https://github.com/vimeo/psalm/pull/10639](https://github.com/vimeo/psalm/pull/10639)
- CallMap: Adjust return type for `inotify_add_watch()` to `int|false`
by [@&#8203;UlrichEckhardt](https://github.com/UlrichEckhardt) in
[https://github.com/vimeo/psalm/pull/10637](https://github.com/vimeo/psalm/pull/10637)
- Fix check-type when using builtin types from within a namespace by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/10648](https://github.com/vimeo/psalm/pull/10648)
- Do not add `callable` as a native property type by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10654](https://github.com/vimeo/psalm/pull/10654)
- Fix additional places where base_dir was broken due to missing
separator by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10630](https://github.com/vimeo/psalm/pull/10630)
- Late binding of enum cases by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10655](https://github.com/vimeo/psalm/pull/10655)
- Suppress `UndefinedClass` in `whatever_exists()` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10659](https://github.com/vimeo/psalm/pull/10659)
- Fix parsing magic method annotations by
[@&#8203;issidorov](https://github.com/issidorov) in
[https://github.com/vimeo/psalm/pull/10665](https://github.com/vimeo/psalm/pull/10665)
- Strip callmap prefixes from parameter names by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10666](https://github.com/vimeo/psalm/pull/10666)
- Narrow `ord()` return type to `int<0,255>` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10676](https://github.com/vimeo/psalm/pull/10676)
- Template union object incorrect assertions by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/10677](https://github.com/vimeo/psalm/pull/10677)
- Don't show backtrace in `InvalidDocblock` issue message by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10679](https://github.com/vimeo/psalm/pull/10679)
- Class consts in array shapes by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10678](https://github.com/vimeo/psalm/pull/10678)
- Prevent mixed|null by
[@&#8203;robchett](https://github.com/robchett) in
[https://github.com/vimeo/psalm/pull/10675](https://github.com/vimeo/psalm/pull/10675)

##### Internal changes

- Drop unused local composer repo by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10647](https://github.com/vimeo/psalm/pull/10647)
- Clarify that Pull request labels failure is to be resolved by
maintainers by [@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10649](https://github.com/vimeo/psalm/pull/10649)
- Fix unstable `hasFullyQualified(Interface|Enum)()` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10603](https://github.com/vimeo/psalm/pull/10603)
- Revert partial mistakenly pushed fix by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10671](https://github.com/vimeo/psalm/pull/10671)

**Full Changelog**:
vimeo/psalm@5.21.1...5.22.0

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.21.0...5.21.1)

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

#### What's Changed

##### Fixes

- Fix baseline loading for path specified on the command line by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10628](https://github.com/vimeo/psalm/pull/10628)

**Full Changelog**:
vimeo/psalm@5.21.0...5.21.1

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.20.0...5.21.0)

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

#### What's Changed

##### Features

- Allow importing typedefs from enums by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10617](https://github.com/vimeo/psalm/pull/10617)

##### Fixes

- Fix [#&#8203;10552](https://github.com/vimeo/psalm/issues/10552) by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10572](https://github.com/vimeo/psalm/pull/10572)
- Unit test improvements for php-parser 5 by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10574](https://github.com/vimeo/psalm/pull/10574)
- Fix template replacement edge case by
[@&#8203;klimick](https://github.com/klimick) in
[https://github.com/vimeo/psalm/pull/10586](https://github.com/vimeo/psalm/pull/10586)
- Switch condition order by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10594](https://github.com/vimeo/psalm/pull/10594)
- Partial revert "Fix auto completion by partial property or method" by
[@&#8203;issidorov](https://github.com/issidorov) in
[https://github.com/vimeo/psalm/pull/10588](https://github.com/vimeo/psalm/pull/10588)
- \[LSP] Add issue type in description by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10607](https://github.com/vimeo/psalm/pull/10607)
- Do not validate callable arguments in lenient contexts by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10601](https://github.com/vimeo/psalm/pull/10601)
- `readgzfile()` is impure by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10600](https://github.com/vimeo/psalm/pull/10600)
- Allow properties on intersections with enum interfaces by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10599](https://github.com/vimeo/psalm/pull/10599)
- `key_exists()` is an alias for `array_key_exists()` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10598](https://github.com/vimeo/psalm/pull/10598)
- Fix language server running with `opcache.save_comments=0` by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10614](https://github.com/vimeo/psalm/pull/10614)
- Report `MissingConstructor` for natively typed mixed properties by
[@&#8203;weirdan](https://github.com/weirdan) in
[https://github.com/vimeo/psalm/pull/10615](https://github.com/vimeo/psalm/pull/10615)

##### Internal changes

- Bump actions/cache from 3 to 4 by
[@&#8203;dependabot](https://github.com/dependabot) in
[https://github.com/vimeo/psalm/pull/10584](https://github.com/vimeo/psalm/pull/10584)
- Baseline update by [@&#8203;jorgsowa](https://github.com/jorgsowa)
in
[https://github.com/vimeo/psalm/pull/10593](https://github.com/vimeo/psalm/pull/10593)
- Re-work CheckTrivialExprVisitor by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10612](https://github.com/vimeo/psalm/pull/10612)
- Minor php-parser tweaks by
[@&#8203;edsrzf](https://github.com/edsrzf) in
[https://github.com/vimeo/psalm/pull/10605](https://github.com/vimeo/psalm/pull/10605)

#### New Contributors

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

**Full Changelog**:
vimeo/psalm@5.20.0...5.21.0

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.19.1...5.20.0)

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

#### What's Changed

##### Features

- report error for non-strict or empty comparison on truthy+falsy union
by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10502](https://github.com/vimeo/psalm/pull/10502)

##### Fixes

- Fix template, conditional array keys by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10568](https://github.com/vimeo/psalm/pull/10568)

**Full Changelog**:
vimeo/psalm@5.19.1...5.20.0

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.19.0...5.19.1)

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

#### What's Changed

##### Fixes

- Deprecated Template Classes are not ignored by
[@&#8203;psalm-suppress](https://github.com/psalm-suppress)
DeprecatedClass by
[@&#8203;samlitowitz](https://github.com/samlitowitz) in
[https://github.com/vimeo/psalm/pull/10518](https://github.com/vimeo/psalm/pull/10518)
- Implement \__set method in SimpleXMLElement stub by
[@&#8203;kthaler](https://github.com/kthaler) in
[https://github.com/vimeo/psalm/pull/10536](https://github.com/vimeo/psalm/pull/10536)
- Make getrandmax type more specific and unserialize to require
class-string by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10540](https://github.com/vimeo/psalm/pull/10540)
- Fix mb_get_info can return null - CI failing bc of reflection by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10543](https://github.com/vimeo/psalm/pull/10543)
- make basename & dirname return types more specific by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10545](https://github.com/vimeo/psalm/pull/10545)
- add support for extract to set variables for keyed arrays and respect
EXTR_SKIP by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10544](https://github.com/vimeo/psalm/pull/10544)
- remove redundat directory separator which caused "//" in path not
found errors by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10542](https://github.com/vimeo/psalm/pull/10542)
- Fix empty literal string becomes non-empty-string by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10499](https://github.com/vimeo/psalm/pull/10499)

#### New Contributors

- [@&#8203;samlitowitz](https://github.com/samlitowitz) made their
first contribution in
[https://github.com/vimeo/psalm/pull/10518](https://github.com/vimeo/psalm/pull/10518)
- [@&#8203;kthaler](https://github.com/kthaler) made their first
contribution in
[https://github.com/vimeo/psalm/pull/10536](https://github.com/vimeo/psalm/pull/10536)

**Full Changelog**:
vimeo/psalm@5.19.0...5.20.0

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.18.0...5.19.0)

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

#### What's Changed

##### Features

- Reduce memory consumption of caching and parallel processing without
igbinary by [@&#8203;sj-i](https://github.com/sj-i) in
[https://github.com/vimeo/psalm/pull/10532](https://github.com/vimeo/psalm/pull/10532)
- filter_input & filter_var return type more specific by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10498](https://github.com/vimeo/psalm/pull/10498)

##### Fixes

- strtok always returns a non-empty-string when it does not return false
by [@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10497](https://github.com/vimeo/psalm/pull/10497)
- Fix [#&#8203;10512](https://github.com/vimeo/psalm/issues/10512):
Fixed SessionUpdateTimestampHandlerInterface parameter names by
[@&#8203;zerkms](https://github.com/zerkms) in
[https://github.com/vimeo/psalm/pull/10524](https://github.com/vimeo/psalm/pull/10524)
- Fix [GH-10465](https://github.com/vimeo/psalm/issues/10465) by
[@&#8203;florisluiten](https://github.com/florisluiten) in
[https://github.com/vimeo/psalm/pull/10483](https://github.com/vimeo/psalm/pull/10483)
- Fix callable without args not handled correctly by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10500](https://github.com/vimeo/psalm/pull/10500)
- Add error when using readonly property in by-ref arg by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10505](https://github.com/vimeo/psalm/pull/10505)
- fix: [#&#8203;10496](https://github.com/vimeo/psalm/issues/10496)
[#&#8203;10503](https://github.com/vimeo/psalm/issues/10503) by
[@&#8203;ging-dev](https://github.com/ging-dev) in
[https://github.com/vimeo/psalm/pull/10508](https://github.com/vimeo/psalm/pull/10508)

#### New Contributors

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

**Full Changelog**:
vimeo/psalm@5.18.0...5.19.0

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

[Compare
Source](https://github.com/vimeo/psalm/compare/5.17.0...5.18.0)

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

##### What's Changed

##### Features

- Add support for Override attribute by
[@&#8203;delolmo](https://github.com/delolmo) in
[https://github.com/vimeo/psalm/pull/10493](https://github.com/vimeo/psalm/pull/10493)

##### Fixes

- Fix [#&#8203;10460](https://github.com/vimeo/psalm/issues/10460) by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10464](https://github.com/vimeo/psalm/pull/10464)
- Emit AfterCodebasePopulatedEvent even on partial scans by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10457](https://github.com/vimeo/psalm/pull/10457)
- Small assertion fix by [@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10455](https://github.com/vimeo/psalm/pull/10455)
- Fix shaped array class string key combination by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10450](https://github.com/vimeo/psalm/pull/10450)
- Fix remaining POSIX-only absolute path detection by
[@&#8203;theodorejb](https://github.com/theodorejb) in
[https://github.com/vimeo/psalm/pull/10452](https://github.com/vimeo/psalm/pull/10452)
- dont combine empty string with numeric-string by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10459](https://github.com/vimeo/psalm/pull/10459)
- Fix type not equal when parent by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10477](https://github.com/vimeo/psalm/pull/10477)
- Use same parameter names in stubs by
[@&#8203;danog](https://github.com/danog) in
[https://github.com/vimeo/psalm/pull/10480](https://github.com/vimeo/psalm/pull/10480)
- fix false positive ArgumentTypeCoercion for callback param by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10454](https://github.com/vimeo/psalm/pull/10454)
- report error for invalid array key type by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10481](https://github.com/vimeo/psalm/pull/10481)
- fix literal int/string comparisons only using one literal by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10484](https://github.com/vimeo/psalm/pull/10484)
- add InvalidArgument error when passing false to true param by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10488](https://github.com/vimeo/psalm/pull/10488)
- Fix Uncaught RuntimeException: PHP Error: Uninitialized string offset
0 when $pattern is empty by
[@&#8203;iMu3ic](https://github.com/iMu3ic) in
[https://github.com/vimeo/psalm/pull/10489](https://github.com/vimeo/psalm/pull/10489)

##### Internal changes

- fix composer scripts running with inconsistent php versions by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10463](https://github.com/vimeo/psalm/pull/10463)
- update fidry/cpu-core-counter dependency by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10456](https://github.com/vimeo/psalm/pull/10456)
- fix psalm v4 hardcoded in tests by
[@&#8203;kkmuffme](https://github.com/kkmuffme) in
[https://github.com/vimeo/psalm/pull/10475](https://github.com/vimeo/psalm/pull/10475)

##### New Contributors

- [@&#8203;iMu3ic](https://github.com/iMu3ic) made their first
contribution in
[https://github.com/vimeo/psalm/pull/10489](https://github.com/vimeo/psalm/pull/10489)
- [@&#8203;delolmo](https://github.com/delolmo) made their first
contribution in
[https://github.com/vimeo/psalm/pull/10493](https://github.com/vimeo/psalm/pull/10493)

**Full Changelog**:
vimeo/psalm@5.17.0...5.18.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:eyJjcmVhdGVkSW5WZXIiOiIzNy45My4xIiwidXBkYXRlZEluVmVyIjoiMzcuMzMxLjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIn0=-->

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:feature The PR will be included in 'Features' section of the release notes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Generator send type is not checked when traversing it with foreach
3 participants