Skip to content

Conversation

calebdw
Copy link
Contributor

@calebdw calebdw commented Sep 5, 2025

Closes phpstan/phpstan#11707, closes phpstan/phpstan#12585

Supersedes #3828, supersedes #3131, supersedes #3823

Hello!

This adds generalized dynamic parameter type extensions and deprecates the parameter closure type extensions per phpstan/phpstan#11707 (comment).

This also fixes the return.type and the argument.type errors described in phpstan/phpstan#12585 when the parameter type is overridden via the extension.

Note

The original type from the closure type extensions was being passed around as $passedToType to the methods that needed it. However, with the new extensions the type must be passed around more, instead of adding parameter types to all the methods, I opted to add it to the ExpressionContext object that was already being passed around (given that this is context and whatnot) as overriddenType since I wasn't quite sure what $passedToType really meant. Let me know if there's something you'd rather do differently.

CC: @canvural, @Neol3108

Thanks!

@calebdw calebdw force-pushed the dynamic_parameter_extension branch 4 times, most recently from 49c7da8 to 58e51fb Compare September 5, 2025 14:15
@calebdw calebdw marked this pull request as draft September 5, 2025 16:35
@calebdw calebdw force-pushed the dynamic_parameter_extension branch from 58e51fb to 79de0a6 Compare September 5, 2025 17:05
@calebdw calebdw marked this pull request as ready for review September 5, 2025 17:36
@phpstan-bot
Copy link
Collaborator

This pull request has been marked as ready for review.

@canvural
Copy link
Contributor

canvural commented Sep 6, 2025

I tested it by porting my previous implementation for Larastan to this one, and looks like it works fine! Will try to implement more use cases and see if I can find any bugs. Also will try to test it on real projects.But so far so good. Thanks for this!

I'll also try to review this PR (though Ondrej would do a better job 😄 )

@calebdw calebdw force-pushed the dynamic_parameter_extension branch from 79de0a6 to 7c605c1 Compare September 13, 2025 12:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Invalid argument types when using MethodParameterClosureTypeExtension Allow specifying that parameters should be covariant
3 participants