[red-knot] Ban list literals in most contexts in type expressions #16847
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 reworks
TypeInferenceBuilder::infer_type_expression()
so that we emit diagnostics when encountering a list literal in a type expression. The only place where a list literal is allowed in a type expression is if it appears as the first argument toCallable[]
, andCallable
is already heavily special-cased in our type-expression parsing.In order to ensure that list literals are always allowed as the first argument to
Callabler
(but never allowed as the second, third, etc. argument), I had to do some refactoring of our type-expression parsing forCallable
annotations.Test Plan
New mdtests added, and existing ones updated