[red-knot] Allow type[]
to be subscripted
#13667
Merged
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.
Fixed a TODO by adding another TODO. It's the red-knot way!
Summary
builtins.type
can be subscripted at runtime on Python 3.9+, even though it has no__class_getitem__
method and its metaclass (which is... itself) has no__getitem__
method. The special case is hardcoded directly intoPyObject_GetItem
in CPython. We just have to replicate the special case in our semantic model.This will fail at runtime on Python <3.9. However, there's a bunch of outstanding questions (detailed in the TODO comment I added) regarding how we deal with subscriptions of other generic types on lower Python versions. Since we want to avoid too many false positives for now, I haven't tried to address this; I've just made
type
subscriptable on all Python versions.Test Plan
cargo test -p red_knot_python_semantic --lib