Skip to content

Commit

Permalink
Fix types.GenericAlias lookup crash (#17543)
Browse files Browse the repository at this point in the history
Fixes #17542
  • Loading branch information
hauntsaninja committed Jul 27, 2024
1 parent 64c1ebf commit 6cf9180
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 4 deletions.
2 changes: 1 addition & 1 deletion mypy/checkexpr.py
Original file line number Diff line number Diff line change
Expand Up @@ -4341,7 +4341,7 @@ def visit_index_with_type(
elif isinstance(left_type, FunctionLike) and left_type.is_type_obj():
if left_type.type_object().is_enum:
return self.visit_enum_index_expr(left_type.type_object(), e.index, e)
elif left_type.type_object().type_vars:
elif left_type.type_object().type_vars and self.chk.options.python_version >= (3, 9):
return self.named_type("types.GenericAlias")
elif (
left_type.type_object().fullname == "builtins.type"
Expand Down
20 changes: 17 additions & 3 deletions test-data/unit/check-functions.test
Original file line number Diff line number Diff line change
Expand Up @@ -1779,6 +1779,7 @@ def Arg(x, y): pass
F = Callable[[Arg(int, 'x')], int] # E: Invalid argument constructor "__main__.Arg"

[case testCallableParsingFromExpr]
# flags: --python-version 3.9
from typing import Callable, List
from mypy_extensions import Arg, VarArg, KwArg
import mypy_extensions
Expand All @@ -1799,10 +1800,23 @@ L = Callable[[Arg(name='x', type=int)], int] # ok
# I have commented out the following test because I don't know how to expect the "defined here" note part of the error.
# M = Callable[[Arg(gnome='x', type=int)], int] E: Invalid type alias: expression is not a valid type E: Unexpected keyword argument "gnome" for "Arg"
N = Callable[[Arg(name=None, type=int)], int] # ok
O = Callable[[List[Arg(int)]], int] # E: Invalid type alias: expression is not a valid type # E: Value of type "int" is not indexable # E: Type expected within [...]
O = Callable[[List[Arg(int)]], int] # E: Invalid type alias: expression is not a valid type \
# E: Value of type "int" is not indexable \
# E: Type expected within [...]
P = Callable[[mypy_extensions.VarArg(int)], int] # ok
Q = Callable[[Arg(int, type=int)], int] # E: Invalid type alias: expression is not a valid type # E: Value of type "int" is not indexable # E: "Arg" gets multiple values for keyword argument "type"
R = Callable[[Arg(int, 'x', name='y')], int] # E: Invalid type alias: expression is not a valid type # E: Value of type "int" is not indexable # E: "Arg" gets multiple values for keyword argument "name"
Q = Callable[[Arg(int, type=int)], int] # E: Invalid type alias: expression is not a valid type \
# E: Value of type "int" is not indexable \
# E: "Arg" gets multiple values for keyword argument "type"
R = Callable[[Arg(int, 'x', name='y')], int] # E: Invalid type alias: expression is not a valid type \
# E: Value of type "int" is not indexable \
# E: "Arg" gets multiple values for keyword argument "name"







[builtins fixtures/dict.pyi]

[case testCallableParsing]
Expand Down

0 comments on commit 6cf9180

Please sign in to comment.