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 (DateTime|DateTimeImmutable)::modify() return types #9172

Merged
merged 1 commit into from Feb 20, 2023
Merged

fix (DateTime|DateTimeImmutable)::modify() return types #9172

merged 1 commit into from Feb 20, 2023

Conversation

DaDeather
Copy link

#9042 caused issues to any called method on an instance of DateTime|DateTimeImmutable after calling the modify method.

This fixes #9171

@pilif
Copy link
Contributor

pilif commented Jan 24, 2023

This will cause #9042 to be re-opened though. ˋmodify()ˋ returns something of the same type that it was called on which is consistent to the ˋstaticˋ return type

@DaDeather
Copy link
Author

Do you got any better idea how to solve this correctly? TBH i'm not really into the codebase of psalm yet. Which is why this is the only thing I came up with up till now 🤷.

@DaDeather
Copy link
Author

FYI: another approach I found would be to set:
$event->getContext()->self = $event->getCalledFqClasslikeName() ?? $event->getFqClasslikeName();
right before the return.

This would also fix this issue. But as I said before I'm not well into the ecosystem of psalm 🤷.

@DaDeather
Copy link
Author

Is there anything I can do to make this one happen soon?

@weirdan
Copy link
Collaborator

weirdan commented Feb 20, 2023

I see where the confusion is. Signature return types and return value types, while being related concepts, are not the same thing. static is a relative type which is only valid in the context of the original class. When it's leaked outside, it may make Psalm assume funny things happen, like this: https://psalm.dev/r/c23709c02e

In the snippet above, Psalm assumes you're trying to call Unrelated::format() because static is interpreted in the context of class Unrelated.

@pilif with this PR, your snippet reports $foo2 from #9042 to be Subclass, as it should. In fact, it's included in a test.

@psalm-github-bot
Copy link

I found these snippets:

https://psalm.dev/r/c23709c02e
<?php

class Subclass extends DateTimeImmutable
{
}

class Unrelated {
    public function doThings(): void {

        $foo = new Subclass('2023-01-01 12:12:13');
        $foo2 = $foo->modify('+7 days');
        /** @psalm-trace $foo2 */;
        echo $foo2->format('Y-m-d');
    }
    public function format(int $_p): never { exit; }
}
Psalm output (using commit 8e0fd88):

INFO: Trace - 12:34 - $foo2: Subclass&static

ERROR: InvalidScalarArgument - 13:28 - Argument 1 of Unrelated::format expects int, but 'Y-m-d' provided

ERROR: NoValue - 13:14 - All possible types for this argument were invalidated - This may be dead code

@weirdan
Copy link
Collaborator

weirdan commented Feb 20, 2023

@DaDeather would you mind rebasing this on top of master? I think it should clear up BCC failures.

@weirdan weirdan added the release:fix The PR will be included in 'Fixes' section of the release notes label Feb 20, 2023
#9042 caused issues to any called method on an instance
of DateTime|DateTimeImmutable after calling the modify
method.

This fixes #9171
@weirdan weirdan merged commit 589fee7 into vimeo:master Feb 20, 2023
@weirdan
Copy link
Collaborator

weirdan commented Feb 20, 2023

Thanks!

tcarrio pushed a commit to open-feature/php-sdk that referenced this pull request Mar 11, 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://togithub.com/vimeo/psalm) | require-dev | minor
| `~5.4.0` -> `~5.8.0` |

---

### Release Notes

<details>
<summary>vimeo/psalm</summary>

### [`v5.8.0`](https://togithub.com/vimeo/psalm/releases/tag/5.8.0)

[Compare Source](https://togithub.com/vimeo/psalm/compare/5.7.7...5.8.0)

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

#### What's Changed

##### Features

- FFI stubs improvement by
[@&#8203;UlrichEckhardt](https://togithub.com/UlrichEckhardt) in
[vimeo/psalm#9368
- Support sizeof alias of count by
[@&#8203;jsanahuja](https://togithub.com/jsanahuja) in
[vimeo/psalm#9375
- Iterated array in `foreach` body is never empty by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9380
- Process `@psalm-api` tags on methods by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9383
- Enforce literal string length limit by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9381
- \[ibm_db2] Improve return type inference for `db2_autocommit()` by
[@&#8203;phansys](https://togithub.com/phansys) in
[vimeo/psalm#9310
- Only disable grpc extension if it is not properly configured by
[@&#8203;gndk](https://togithub.com/gndk) in
[vimeo/psalm#9398
- PHP 8.3 dictionary by [@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9366
- concat should never remove non empty non falsy from string
[#&#8203;9411](https://togithub.com/vimeo/psalm/issues/9411) by
[@&#8203;EgorBakulin](https://togithub.com/EgorBakulin) in
[vimeo/psalm#9422
- Forbid private final methods by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9442
- Support for `readonly` classes by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9444
- Consider new HTML entity en/decode function defaults since PHP 8.1 by
[@&#8203;pereorga](https://togithub.com/pereorga) in
[vimeo/psalm#9471

##### Fixes

- Instances of `object` returned by `db2_*()` functions are always
instances of `stdClass` by
[@&#8203;phansys](https://togithub.com/phansys) in
[vimeo/psalm#9369
- Simplify and fix Shepherd to support custom endpoints for reporting by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9296
- Fixes [#&#8203;9384](https://togithub.com/vimeo/psalm/issues/9384)
(Wrong type for variable checked with is_long) by
[@&#8203;ygottschalk](https://togithub.com/ygottschalk) in
[vimeo/psalm#9385
- Update Phar callmaps by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9389
- Correctly process use aliases in `@psalm-scope-this` by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9390
- Allow `array` as magic method name by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9391
- Consistently report docblock issues on all classlikes by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9392
- \[ibm_db2] Update some return types in callmaps by
[@&#8203;phansys](https://togithub.com/phansys) in
[vimeo/psalm#9387
- Preserve PossiblyUndefinedVariable when fixing UnusedVariable by
[@&#8203;edsrzf](https://togithub.com/edsrzf) in
[vimeo/psalm#9400
- \[ibm_db2] Update callmaps by
[@&#8203;phansys](https://togithub.com/phansys) in
[vimeo/psalm#9404
- Fix [#&#8203;9401](https://togithub.com/vimeo/psalm/issues/9401) by
[@&#8203;ptomulik](https://togithub.com/ptomulik) in
[vimeo/psalm#9418
- Fix remaining spl and iterator callmaps by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9420
- An attempt to fix
[#&#8203;4460](https://togithub.com/vimeo/psalm/issues/4460) by
[@&#8203;ptomulik](https://togithub.com/ptomulik) in
[vimeo/psalm#9415
- `array_pop` is impure by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9434
- Revert "`array_pop` is impure" by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9435
- Update pack() stub by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9438
- Merge param descriptions when adding or updating types by
[@&#8203;aboyton](https://togithub.com/aboyton) in
[vimeo/psalm#9441
- PHP 8.2 attributes moved to 8.2 stub by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9445
- Improce enum case reconciliation by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9457
- Do not strip the last `)` bracket when parsing phpdoc type aliases. by
[@&#8203;pvandommelen](https://togithub.com/pvandommelen) in
[vimeo/psalm#9458
- Replace package-versions with Composer 2 APIs by
[@&#8203;Jean85](https://togithub.com/Jean85) in
[vimeo/psalm#9459
- Fix DOM callmaps by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9460
- Don't crash on unary minus overflow by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9466
- Fix remaining intl callmaps by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9473

##### Internal changes

- Convert callmap associative-array types into proper array types by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9362
- Callmap is always non-empty by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9405
- Reorganize pushes to `psalm/phar` by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9399
- Do not display ext deprecation note when `disableExtensions` used by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9291
- Require `<?php` tag in tests by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9443

#### New Contributors

- [@&#8203;UlrichEckhardt](https://togithub.com/UlrichEckhardt) made
their first contribution in
[vimeo/psalm#9368
- [@&#8203;jsanahuja](https://togithub.com/jsanahuja) made their first
contribution in
[vimeo/psalm#9375
- [@&#8203;EgorBakulin](https://togithub.com/EgorBakulin) made their
first contribution in
[vimeo/psalm#9422
- [@&#8203;pereorga](https://togithub.com/pereorga) made their first
contribution in
[vimeo/psalm#9471

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

### [`v5.7.7`](https://togithub.com/vimeo/psalm/releases/tag/5.7.7)

[Compare Source](https://togithub.com/vimeo/psalm/compare/5.7.6...5.7.7)

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

#### What's Changed

##### Fixes

- Don't crash on empty `jit_buffer_size` by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9397

**Full Changelog**: vimeo/psalm@5.7.6...5.7.7

### [`v5.7.6`](https://togithub.com/vimeo/psalm/releases/tag/5.7.6)

[Compare Source](https://togithub.com/vimeo/psalm/compare/5.7.5...5.7.6)

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

#### What's Changed

##### Fixes

- Disable `opcache.preload` if it's enabled by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9388

**Full Changelog**: vimeo/psalm@5.7.5...5.7.6

### [`v5.7.5`](https://togithub.com/vimeo/psalm/releases/tag/5.7.5)

[Compare Source](https://togithub.com/vimeo/psalm/compare/5.7.4...5.7.5)

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

#### What's Changed

##### Fixes

- Workaround opcache issue (fixes
[#&#8203;9363](https://togithub.com/vimeo/psalm/issues/9363)) by
[@&#8203;danog](https://togithub.com/danog) in
[vimeo/psalm#9364

**Full Changelog**: vimeo/psalm@5.7.4...5.7.5

### [`v5.7.4`](https://togithub.com/vimeo/psalm/releases/tag/5.7.4)

[Compare Source](https://togithub.com/vimeo/psalm/compare/5.7.3...5.7.4)

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

#### What's Changed

##### Fixes

- Include setrawcookie as an impure function by
[@&#8203;edsrzf](https://togithub.com/edsrzf) in
[vimeo/psalm#9356
- Fix several spl callmap methods by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9360
- Revert "[#&#8203;7387](https://togithub.com/vimeo/psalm/issues/7387)
Add asserting non-empty-string by strlen" by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9358

**Full Changelog**: vimeo/psalm@5.7.3...5.7.4

### [`v5.7.3`](https://togithub.com/vimeo/psalm/releases/tag/5.7.3)

[Compare Source](https://togithub.com/vimeo/psalm/compare/5.7.2...5.7.3)

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

#### What's Changed

##### Fixes

- Replace use of DOMParentNode::append() with appendChild() by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9354

**Full Changelog**: vimeo/psalm@5.7.2...5.7.3

### [`v5.7.2`](https://togithub.com/vimeo/psalm/releases/tag/5.7.2)

[Compare Source](https://togithub.com/vimeo/psalm/compare/5.7.1...5.7.2)

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

#### What's Changed

##### Fixes

- fix (DateTime|DateTimeImmutable)::modify() return types by
[@&#8203;DaDeather](https://togithub.com/DaDeather) in
[vimeo/psalm#9172
- Workaround arm64 opcache bug (fixes
[#&#8203;9350](https://togithub.com/vimeo/psalm/issues/9350)) by
[@&#8203;danog](https://togithub.com/danog) in
[vimeo/psalm#9351

#### New Contributors

- [@&#8203;DaDeather](https://togithub.com/DaDeather) made their first
contribution in
[vimeo/psalm#9172

**Full Changelog**: vimeo/psalm@5.7.1...5.7.2

### [`v5.7.1`](https://togithub.com/vimeo/psalm/releases/tag/5.7.1)

[Compare Source](https://togithub.com/vimeo/psalm/compare/5.7.0...5.7.1)

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

#### What's Changed

##### Fixes

- Always use 0x7FFEBFFF opcache optimization level (fixes
[#&#8203;9340](https://togithub.com/vimeo/psalm/issues/9340)) by
[@&#8203;danog](https://togithub.com/danog) in
[vimeo/psalm#9342
- Fix `PsalmRestarter::restart()` signature by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9347

**Full Changelog**: vimeo/psalm@5.7.0...5.7.1

### [`v5.7.0`](https://togithub.com/vimeo/psalm/releases/tag/5.7.0)

[Compare Source](https://togithub.com/vimeo/psalm/compare/5.6.0...5.7.0)

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

#### What's Changed

##### Deprecations

- Deprecate `FunctionLikeStorage::$unused_docblock_params` by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9312

##### Features

- [#&#8203;7387](https://togithub.com/vimeo/psalm/issues/7387) Add
asserting non-empty-string by strlen by
[@&#8203;LeoVie](https://togithub.com/LeoVie) in
[vimeo/psalm#8761
- Forbid implementing some interfaces by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9272
- Added issue type and psalm.dev link to Emacs report by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9299
- Allow `@var` annotations on global vars by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9301
- Allow suppressing `MissingThrowsDocblock` for individual exceptions by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9303
- Flag direct constructor calls by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9311
- Flag docblock parameters that have no counterparts in function
signature by [@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9314
- Forbid non-null defaults for callable parameters by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9316

##### Fixes

- cdata in baseline by
[@&#8203;jack-worman](https://togithub.com/jack-worman) in
[vimeo/psalm#9184
- Resolve class constants within PhpStorm metadata by
[@&#8203;shvlv](https://togithub.com/shvlv) in
[vimeo/psalm#9173
- Detect duplicate keys in array shapes by
[@&#8203;danog](https://togithub.com/danog) in
[vimeo/psalm#9177
- Fix xmlrpc callmap functions that were dropped in PHP 8.0 by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9212
- fix `didChange` event in LSP by
[@&#8203;ging-dev](https://togithub.com/ging-dev) in
[vimeo/psalm#9207
- Added [@&#8203;psalm-pure](https://togithub.com/psalm-pure) to
filter_var() by [@&#8203;mmcev106](https://togithub.com/mmcev106) in
[vimeo/psalm#9170
- Add DatePeriod::INCLUDE_END_DATE option by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9220
- Add more specific return for class-implements by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9228
- Convert callmaps resource types by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9227
- Use "numeric-string" type for some MySQLi properties by
[@&#8203;phansys](https://togithub.com/phansys) in
[vimeo/psalm#9226
- find_unused_code CLI arg should not be overwritten by config file by
[@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[vimeo/psalm#9235
- Fix divide by a floating point zero by
[@&#8203;aboyton](https://togithub.com/aboyton) in
[vimeo/psalm#9247
- Don't crash on unknown exceptions in `@throws` docblock by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9250
- Fix Spoofchecker callmaps by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9256
- Fix crashes with invalid `@psalm-check-type` syntax by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9257
- Fix crash when int range boundary is overflown by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9260
- Drop abandoned mcve m\_ functions by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9266
- Fix several callmap fuction signatures by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9264
- fix lstat bug cache directory race condition by
[@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[vimeo/psalm#9253
- Drop removed xsl callmap functions by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9269
- Drop abandoned maxdb callmap functions by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9270
- Drop abandoned newt callmap functions by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9271
- Update callmap types for php 8.2 by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9273
- Fix opcache being loaded twice by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9265
- Forbid overriding built-in enum methods by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9280
- Fix remaining callmap functions by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9278
- Add curl stubs to prevent crashes by
[@&#8203;kamil-tekiela](https://togithub.com/kamil-tekiela) in
[vimeo/psalm#9283
- Compare enum cases thoroughly by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9286
- Drop abandoned ncurses extension by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9293
- Drop abandoned cairo extension by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9292
- Emit issues for calls to `is_a(string, class-string, false)` by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9287
- Made `WeakReference` mutable by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9297
- Flag class constant references where LHS is ordinary string by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9302
- Fixed issue message for missing `@psalm-external-mutation-free` by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9304
- Fix memcached extension callmap by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9309
- Fix strpos stub return type by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9322
- Propagate phantom classes to closure context by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9329
- Fix language server first-class callable crashes by
[@&#8203;edsrzf](https://togithub.com/edsrzf) in
[vimeo/psalm#9336
- Forbid first-class callables in `new` by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9338
- Negated is_numeric narrows scalar type by
[@&#8203;edsrzf](https://togithub.com/edsrzf) in
[vimeo/psalm#9339

##### Docs

- Documentation: Add BackedEnum compatibility to value-of docs by
[@&#8203;bitwise-operators](https://togithub.com/bitwise-operators) in
[vimeo/psalm#9252
- Added note on properties used in constructor only by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9298
- Added a page explaining how to add a new issue type by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9315

##### Internal changes

- Unify warning messages for deprecated config variables by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9135
- Fix newly discovered CS issues by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9210
- Fixed more CS issues by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9236
- Always enable JIT by [@&#8203;danog](https://togithub.com/danog) in
[vimeo/psalm#9237
- Allow fidry/cpu-core-counter:v0.5 by
[@&#8203;Slamdunk](https://togithub.com/Slamdunk) in
[vimeo/psalm#9234
- Update workflows to use non-deprecated method of setting step output
by [@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9251
- Emit warning if opcache cannot be enabled by
[@&#8203;danog](https://togithub.com/danog) in
[vimeo/psalm#9240
- Add option to skip callmap test by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9300
- Suggest Psalm to be installed in require-dev section by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9308
- Skip verifying callmaps based on name pattern by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9313
- Skip verifying memcache extension callmap by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9325
- Run assertions on CI by [@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9318
- Allow spatie/array-to-xml v3 by
[@&#8203;gharlan](https://togithub.com/gharlan) in
[vimeo/psalm#9331
- Disable JIT-incompatible extensions to prevent warnings by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9326
- Added the test to validate test environment itself by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9337

##### Other changes

- Remove some logic that didn't need to be there by
[@&#8203;muglug](https://togithub.com/muglug) in
[vimeo/psalm#9209

#### New Contributors

- [@&#8203;shvlv](https://togithub.com/shvlv) made their first
contribution in
[vimeo/psalm#9173
- [@&#8203;LeoVie](https://togithub.com/LeoVie) made their first
contribution in
[vimeo/psalm#8761
- [@&#8203;phansys](https://togithub.com/phansys) made their first
contribution in
[vimeo/psalm#9226
- [@&#8203;Slamdunk](https://togithub.com/Slamdunk) made their first
contribution in
[vimeo/psalm#9234
- [@&#8203;aboyton](https://togithub.com/aboyton) made their first
contribution in
[vimeo/psalm#9247
- [@&#8203;edsrzf](https://togithub.com/edsrzf) made their first
contribution in
[vimeo/psalm#9336

**Full Changelog**: vimeo/psalm@5.6.0...5.7.0

### [`v5.6.0`](https://togithub.com/vimeo/psalm/releases/tag/5.6.0)

[Compare Source](https://togithub.com/vimeo/psalm/compare/5.5.0...5.6.0)

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

#### What's Changed

##### Features

- Check `$this` in static closures by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9164

##### Fixes

- Use STDERR for Shepherd output by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9169

##### Typos

- HEAD in all caps by
[@&#8203;buismaarten](https://togithub.com/buismaarten) in
[vimeo/psalm#9163

#### New Contributors

- [@&#8203;buismaarten](https://togithub.com/buismaarten) made their
first contribution in
[vimeo/psalm#9163

**Full Changelog**: vimeo/psalm@5.5.0...5.6.0

### [`v5.5.0`](https://togithub.com/vimeo/psalm/releases/tag/5.5.0)

[Compare Source](https://togithub.com/vimeo/psalm/compare/5.4.0...5.5.0)

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

#### What's Changed

##### Features

- Add Codebase to remaining events by
[@&#8203;jack-worman](https://togithub.com/jack-worman) in
[vimeo/psalm#8961
- Add [@&#8203;psalm-api](https://togithub.com/psalm-api) annotation by
[@&#8203;jack-worman](https://togithub.com/jack-worman) in
[vimeo/psalm#8987
- Refined `explode()` types by
[@&#8203;Ocramius](https://togithub.com/Ocramius) in
[vimeo/psalm#9016
- Support constants in traits by
[@&#8203;jack-worman](https://togithub.com/jack-worman) in
[vimeo/psalm#9126
- Report unused baseline entries by
[@&#8203;jack-worman](https://togithub.com/jack-worman) in
[vimeo/psalm#9130
- Allow to specify custom shepherd endpoint by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9133
- Narrow ->value of enum case(s) to only the possible values by
[@&#8203;annervisser](https://togithub.com/annervisser) in
[vimeo/psalm#9157

##### Fixes

- Fix bug by [@&#8203;danog](https://togithub.com/danog) in
[vimeo/psalm#8955
- getopt() return type fix by
[@&#8203;jack-worman](https://togithub.com/jack-worman) in
[vimeo/psalm#8945
- Allow omitting argument offsets for map-type overrides in
phpstorm.meta by [@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#8781
- Extend XML enum of supported PHP ext by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#8971
- Revert [#&#8203;8955](https://togithub.com/vimeo/psalm/issues/8955) by
[@&#8203;danog](https://togithub.com/danog) in
[vimeo/psalm#8972
- (mb\_)chr returns a non-empty-string by
[@&#8203;fluffycondor](https://togithub.com/fluffycondor) in
[vimeo/psalm#8974
- Remove occurrences from error baseline by
[@&#8203;jack-worman](https://togithub.com/jack-worman) in
[vimeo/psalm#8967
- Add DateTimeInterface::\__serialize and \__unserialize by
[@&#8203;michnovka](https://togithub.com/michnovka) in
[vimeo/psalm#8976
- Fix get_object_vars on enums by
[@&#8203;jack-worman](https://togithub.com/jack-worman) in
[vimeo/psalm#8973
- Fixes [#&#8203;8112](https://togithub.com/vimeo/psalm/issues/8112) by
[@&#8203;emmanuelGuiton](https://togithub.com/emmanuelGuiton) in
[vimeo/psalm#8792
- Verify nullable callmap parameters by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#8990
- Improve `invalid references` message in `@psalm-type` by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#8996
- Fix missing version in PHARs build on GA by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#8997
- forbidden function bug and better get_defined_functions() signature by
[@&#8203;jack-worman](https://togithub.com/jack-worman) in
[vimeo/psalm#9002
- Add imap_is_open() to PHP 8.2 dictionary by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9007
- Do not require return type on destructors in interfaces by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9009
- feat: add xdebug_info (fixes
[#&#8203;8977](https://togithub.com/vimeo/psalm/issues/8977)) by
[@&#8203;mathe42](https://togithub.com/mathe42) in
[vimeo/psalm#9011
- Make `$http_response_header` a non-empty-list by
[@&#8203;fluffycondor](https://togithub.com/fluffycondor) in
[vimeo/psalm#9001
- Preserve from_docblock in TypeCombiner by
[@&#8203;VincentLanglet](https://togithub.com/VincentLanglet) in
[vimeo/psalm#8999
- Add getAtomicType to IsNotAClass for proper negation Reconciliation by
[@&#8203;orklah](https://togithub.com/orklah) in
[vimeo/psalm#9017
- create proper TClosure instead of TNamedObject with a Closure value by
[@&#8203;orklah](https://togithub.com/orklah) in
[vimeo/psalm#9018
- Prevent DB escaping functions from affecting non-sql taints by
[@&#8203;mmcev106](https://togithub.com/mmcev106) in
[vimeo/psalm#9019
- Is containedbug by [@&#8203;orklah](https://togithub.com/orklah) in
[vimeo/psalm#9020
- Better type inference and type checking for large union types used in
array keys/values by [@&#8203;Ocramius](https://togithub.com/Ocramius)
in
[vimeo/psalm#9022
- fix never return for MethodCalls by
[@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[vimeo/psalm#9024
- Fix never return union type wrong condition by
[@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[vimeo/psalm#9023
- fixes return type issues of methods reported for the wrong file by
[@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[vimeo/psalm#9025
- Non empty reconciliation by
[@&#8203;orklah](https://togithub.com/orklah) in
[vimeo/psalm#9021
- fix [@&#8203;psalm-scope-this](https://togithub.com/psalm-scope-this)
not working with FQCN with leading backslash by
[@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[vimeo/psalm#9030
- Fix iterator and exception callmaps by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9035
- fix DateTime::modify() and DateTimeImmutable::modify() return types by
[@&#8203;pilif](https://togithub.com/pilif) in
[vimeo/psalm#9043
- Fix `ReflectionClass::getModifiers()` stub by
[@&#8203;kukulich](https://togithub.com/kukulich) in
[vimeo/psalm#9047
- Fix `ReflectionClass::getReflectionConstants()` stub by
[@&#8203;kukulich](https://togithub.com/kukulich) in
[vimeo/psalm#9048
- Fix `ReflectionClass::getTraitAliases()` stub by
[@&#8203;kukulich](https://togithub.com/kukulich) in
[vimeo/psalm#9046
- Fix `ReflectionFunctionAbstract::getExtensionName()` stub by
[@&#8203;kukulich](https://togithub.com/kukulich) in
[vimeo/psalm#9053
- Fix `ReflectionMethod::getModifiers()` stub by
[@&#8203;kukulich](https://togithub.com/kukulich) in
[vimeo/psalm#9052
- Fix `ReflectionClass::getTraitNames()` stub by
[@&#8203;kukulich](https://togithub.com/kukulich) in
[vimeo/psalm#9051
- Fix `ReflectionClass` stub by
[@&#8203;kukulich](https://togithub.com/kukulich) in
[vimeo/psalm#9055
- fix autoloader not working with absolute path by
[@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[vimeo/psalm#9044
- Narrow down the return type of DOMXPath::query() by
[@&#8203;MidnightDesign](https://togithub.com/MidnightDesign) in
[vimeo/psalm#9072
- fix `I::cases()` where `interface I extends BackedEnum` by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9067
- fix implicit return type by
[@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[vimeo/psalm#9026
- Update Call Maps and Signature for get_headers by
[@&#8203;therealryanbonham](https://togithub.com/therealryanbonham) in
[vimeo/psalm#9073
- dont report MissingFile error when file_exists is validated beforehand
by [@&#8203;kkmuffme](https://togithub.com/kkmuffme) in
[vimeo/psalm#9012
- Handle template type on promoted property by
[@&#8203;vincent4vx](https://togithub.com/vincent4vx) in
[vimeo/psalm#9092
- Additional test and fix when comparing nested templates by
[@&#8203;emmanuelGuiton](https://togithub.com/emmanuelGuiton) in
[vimeo/psalm#9095
- Automatically load stubs for random ext on PHP 8.2 by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9099
- Add missing `int-range` aliases into the list of psalm reserved words
by [@&#8203;eopnetto](https://togithub.com/eopnetto) in
[vimeo/psalm#9107
- Clean up more callmap return types by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9113
- Infer getDefaultValueConstantName() type when isDefaultValueConstant()
is true by [@&#8203;BenMorel](https://togithub.com/BenMorel) in
[vimeo/psalm#9115
- Fix libxml_get_errors() return type by
[@&#8203;jack-worman](https://togithub.com/jack-worman) in
[vimeo/psalm#9118
- Fix remaining ignored CallMap return types that can be updated by
[@&#8203;othercorey](https://togithub.com/othercorey) in
[vimeo/psalm#9122
- Fix dom_import_simplexml() by
[@&#8203;jack-worman](https://togithub.com/jack-worman) in
[vimeo/psalm#9139
- Fix ReflectionClass::newInstanceArgs() with named parameters by
[@&#8203;BenMorel](https://togithub.com/BenMorel) in
[vimeo/psalm#9085
- Fix shepherd for default domain by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9136
- Suppress warnings when `--no-output` is specified by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9162

##### Docs

- restrictReturnTypes configuration documentation by
[@&#8203;jack-worman](https://togithub.com/jack-worman) in
[vimeo/psalm#9000
- Update ForbiddenCode.md by
[@&#8203;maniaba](https://togithub.com/maniaba) in
[vimeo/psalm#9105
- Add information on pure-callables to documentation by
[@&#8203;bitwise-operators](https://togithub.com/bitwise-operators) in
[vimeo/psalm#9141

##### Internal changes

- Update BCC by [@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#8966
- Drop symfony/polyfill-php80 dependency by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#8988
- Fix PHPCS trailing comma by
[@&#8203;theodorejb](https://togithub.com/theodorejb) in
[vimeo/psalm#9014
- Misc fixes by [@&#8203;danog](https://togithub.com/danog) in
[vimeo/psalm#9031
- Fix remaining markdown issues by
[@&#8203;danog](https://togithub.com/danog) in
[vimeo/psalm#9033
- Bump mheap/github-action-required-labels from 2 to 3 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[vimeo/psalm#9039
- Internal: use more specific types by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9063
- Make it more clear what do we test from Psalm output by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9061
- Internal cleanup: Unify syntax for redis.phpstub by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9088
- Cleanup unsupported extensions message by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9089
- Allow sebastian/diff 5 by
[@&#8203;Jean85](https://togithub.com/Jean85) in
[vimeo/psalm#9117
- Enhance error output for shepherd by
[@&#8203;lptn](https://togithub.com/lptn) in
[vimeo/psalm#9134
- Indent docblocks in DocComment test by
[@&#8203;weirdan](https://togithub.com/weirdan) in
[vimeo/psalm#9156

#### New Contributors

- [@&#8203;michnovka](https://togithub.com/michnovka) made their first
contribution in
[vimeo/psalm#8976
- [@&#8203;emmanuelGuiton](https://togithub.com/emmanuelGuiton) made
their first contribution in
[vimeo/psalm#8792
- [@&#8203;mathe42](https://togithub.com/mathe42) made their first
contribution in
[vimeo/psalm#9011
- [@&#8203;kukulich](https://togithub.com/kukulich) made their first
contribution in
[vimeo/psalm#9047
- [@&#8203;therealryanbonham](https://togithub.com/therealryanbonham)
made their first contribution in
[vimeo/psalm#9073
- [@&#8203;maniaba](https://togithub.com/maniaba) made their first
contribution in
[vimeo/psalm#9105
- [@&#8203;eopnetto](https://togithub.com/eopnetto) made their first
contribution in
[vimeo/psalm#9107

**Full Changelog**: vimeo/psalm@5.4.0...5.5.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://app.renovatebot.com/dashboard#github/open-feature/php-sdk).

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

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

Successfully merging this pull request may close these issues.

False positive after a (\DateTime|\DateTimeImmutable)->modify() method call
3 participants