diff --git a/jedi/inference/gradual/annotation.py b/jedi/inference/gradual/annotation.py index 0c47454a..656f57b9 100644 --- a/jedi/inference/gradual/annotation.py +++ b/jedi/inference/gradual/annotation.py @@ -315,6 +315,17 @@ def _infer_type_vars(annotation_value, value_set, is_class_value=False): is_class_value=True, ) ) + elif name == 'Callable': + given = annotation_value.get_generics() + if len(given) == 2: + for nested_annotation_value in given[1]: + _merge_type_var_dicts( + type_var_dict, + _infer_type_vars( + nested_annotation_value, + value_set.execute_annotation(), + ) + ) elif isinstance(annotation_value, LazyGenericClass): name = annotation_value.py__name__() if name == 'Iterable': diff --git a/test/completion/pep0484_typing.py b/test/completion/pep0484_typing.py index adb2a30e..72573e98 100644 --- a/test/completion/pep0484_typing.py +++ b/test/completion/pep0484_typing.py @@ -402,6 +402,15 @@ type_in_out2() #? float() type_in_out2(float) +def ma(a: typing.Callable[[str], TYPE_VARX]) -> typing.Callable[[str], TYPE_VARX]: + return a + +def mf(s: str) -> int: + return int(s) + +#? int() +ma(mf)('2') + # ------------------------- # TYPE_CHECKING # -------------------------