Indicates whether a variable is global#4245
Indicates whether a variable is global#4245cedric-anne wants to merge 2 commits intophpstan:2.1.xfrom
Conversation
2671bed to
4717d70
Compare
4717d70 to
f5cc717
Compare
ondrejmirtes
left a comment
There was a problem hiding this comment.
- You're not testing what this should be allowing you. In the original issue you're saying you want to override variable types with ExpressionTypeResolverExtension but you're not testing that here.
- Instead of setting an attribute on
VariableinassignVariable, I'm thinking we could callassignExpressionherewith new virtual nodephpstan-src/src/Analyser/NodeScopeResolver.php
Line 1970 in 70a039f
GlobalVariableExpr. TheScope::isGlobalVariablecould check the type of the expr node for that.
Existing virtual expr nodes are defined here: https://github.com/phpstan/phpstan-src/tree/2.1.x/src/Node/Expr
Additionally, they have to be handled here https://github.com/phpstan/phpstan-src/blob/2.1.x/src/Node/Printer/Printer.php and here
phpstan-src/src/Analyser/MutatingScope.php
Lines 739 to 753 in 70a039f
f5cc717 to
db78deb
Compare
I added a test for this use case.
I struggle to find how to make it work, probably because I am not familiar with the PHPStan internal logic, so maybe I missed something. I finally found a solution with an early call to the phpstan-src/src/Analyser/MutatingScope.php Lines 4292 to 4301 in db78deb This is the only solution I found to be able to assign the type during the |
|
I think you need to rebase/fix some conflict @cedric-anne |
db78deb to
72730d1
Compare
Done. Conflicts were only related to I am not entirely satisfied with what I have proposed, but I was waiting for a review from someone who knows more about the internal logic of PHPStan to find out if I had missed something obvious, or even if I was heading in the right direction. Also, maybe this should be splitted into two distinct PRs. Indeed, being able to know whether a variable is global and being able to define its type using an extension are two distinct features. |
72730d1 to
3df4189
Compare
3df4189 to
30f69be
Compare
|
Since I am a bit stuck on this without hints, and since I do not have time to work on this for the moment, I close this PR. |
This will permit to easilly assign types to global variables in an extension. Without this change, it is not possible to distinguish local variables from global variables.
Related to phpstan/phpstan#13243 and following a discussion in #4233.
Here is an exemple: