Repository navigation
Conversation
There was a problem hiding this comment.
Pull request overview
This PR fixes PHPStan’s throw-type detection for filter_var() when FILTER_THROW_ON_FAILURE is passed via the third argument (options/flags), aligning throw detection with the existing return-type narrowing logic.
Changes:
- Update
FilterVarThrowTypeExtensionto read the 3rd argument ($options) instead of the 4th and delegate flag detection toFilterFunctionReturnTypeHelper::hasFlag(). - Add a regression test case covering both
FILTER_THROW_ON_FAILUREforms (int flags and['flags' => ...]array) gated to PHP>= 8.5. - Wire the new test data into
CatchWithUnthrownExceptionRuleTest.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| tests/PHPStan/Rules/Exceptions/data/filter-var-throw-on-failure.php | Adds regression examples where filter_var() should be recognized as throwing Filter\FilterFailedException. |
| tests/PHPStan/Rules/Exceptions/CatchWithUnthrownExceptionRuleTest.php | Runs the new regression file under PHP >= 8.5.0. |
| src/Type/Php/FilterVarThrowTypeExtension.php | Fixes argument indexing and reuses shared flag-detection logic for consistent throw inference. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
filter_var()accepts options and flags in its third argument.FilterVarThrowTypeExtensionwas reading the fourth argument instead, so valid calls like this were not treated as throwing:That made
catch (Filter\FilterFailedException)look dead even though the return type helper already narrowed the return type correctly.Fix
Read the third argument in
FilterVarThrowTypeExtensionand reuseFilterFunctionReturnTypeHelper::hasFlag().This keeps throw detection consistent for both forms: