Skip to content

Array is non-empty when in_array is not strict#2539

Merged
ondrejmirtes merged 3 commits into
phpstan:1.11.xfrom
staabm:bug9662
May 30, 2024
Merged

Array is non-empty when in_array is not strict#2539
ondrejmirtes merged 3 commits into
phpstan:1.11.xfrom
staabm:bug9662

Conversation

@staabm

@staabm staabm commented Jul 22, 2023

Copy link
Copy Markdown
Contributor

implements true-context type narrowing to non-empty-array for non-strict use of in_array.
with this PR we only narrow when $needle is of the same type as the $haystack's iterable type.

when non-strict, the loose-compare falsey context would be pretty complicated, therefore this PR just implements the true-context part (which already fixes 2 reported issues).

there is still room for improvement in true and false-context but this is a good first step which should already cover a lot of real-world code.

closes phpstan/phpstan#9662
closes phpstan/phpstan#10228

@staabm
staabm marked this pull request as ready for review January 23, 2024 08:45
@phpstan-bot

Copy link
Copy Markdown
Collaborator

This pull request has been marked as ready for review.

@staabm
staabm marked this pull request as draft January 31, 2024 09:02
@staabm
staabm marked this pull request as ready for review January 31, 2024 13:08
@phpstan-bot

Copy link
Copy Markdown
Collaborator

This pull request has been marked as ready for review.

@staabm

staabm commented Apr 29, 2024

Copy link
Copy Markdown
Contributor Author

@ondrejmirtes I think getting this merged would help a lot of non-strict codebases, because in_array is usally used a lot

@clxmstaab
clxmstaab force-pushed the bug9662 branch 2 times, most recently from 3c01e04 to b1d0623 Compare May 15, 2024 11:29
@staabm
staabm changed the base branch from 1.10.x to 1.11.x May 15, 2024 11:29
@ondrejmirtes
ondrejmirtes merged commit b650df6 into phpstan:1.11.x May 30, 2024
@ondrejmirtes

Copy link
Copy Markdown
Member

Thank you!

@staabm
staabm deleted the bug9662 branch May 30, 2024 14:35
@ghost

ghost commented May 30, 2024

Copy link
Copy Markdown

Hi, this PR does not close phpstan/phpstan#10228. Here I have the updated playground after your change https://phpstan.org/r/026707d1-2de9-4bbb-8f1c-d47312de414c.

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.

Variable $var might not be defined Array undetected as non-empty when in_array is not strict

3 participants