fix: Allow attribute access on union types containing Any #557
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.
Summary
This PR fixes false positive errors when accessing attributes on union types that contain
Any
.Issue #549: False Positive "missing-attribute" on Union Types
When a union type contains
Any
(e.g.,A < /dev/null | Any
), Pyrefly was incorrectly reporting missing attribute errors for the non-Any members of the union. According to gradual typing principles,Any
should allow any operation.Changes
type_contains_any()
helper method that recursively checks if a type containsAny
Any
Any
without generating errorsTests
Added comprehensive tests in
issue_549_any_union.rs
:A | Any
unions (no errors)A | Any
unions (no errors)A | B
unions withoutAny
(still errors as expected)Limitations
This fixes the issue for explicit unions like
A | Any
. The case ofDict[str, Any]
subscript access expanding to unions needs separate handling and is not addressed in this PR.Partially fixes #549