diff --git a/tests/test_type_dir.py b/tests/test_type_dir.py index 020a586..e10179f 100644 --- a/tests/test_type_dir.py +++ b/tests/test_type_dir.py @@ -346,7 +346,7 @@ def test_type_members_func_2(): assert ( str(typ) == "\ -classmethod[tests.test_type_dir.Final, [typemap.typing.Param[typing.Literal['a'], int | None, typing.Never], typemap.typing.Param[typing.Literal['b'], ~K, typing.Never]], dict[str, int]]" +classmethod[tests.test_type_dir.Final, tuple[typemap.typing.Param[typing.Literal['a'], int | None, typing.Never], typemap.typing.Param[typing.Literal['b'], ~K, typing.Never]], dict[str, int]]" ) @@ -361,5 +361,5 @@ def test_type_members_func_3(): assert ( str(typ) == "\ -staticmethod[[typemap.typing.Param[typing.Literal['a'], int | typing.Literal['gotcha!'] | Z | None, typing.Never], typemap.typing.Param[typing.Literal['b'], ~K, typing.Never]], dict[str, int | Z]]" +staticmethod[tuple[typemap.typing.Param[typing.Literal['a'], int | typing.Literal['gotcha!'] | Z | None, typing.Never], typemap.typing.Param[typing.Literal['b'], ~K, typing.Never]], dict[str, int | Z]]" ) diff --git a/typemap/type_eval/_eval_operators.py b/typemap/type_eval/_eval_operators.py index 27b7131..23c29e6 100644 --- a/typemap/type_eval/_eval_operators.py +++ b/typemap/type_eval/_eval_operators.py @@ -229,10 +229,12 @@ def _ann(x): ret = _ann(sig.return_annotation) + # TODO: Is doing the tuple for staticmethod/classmethod legit? + # Putting a list in makes it unhashable... if isinstance(func, staticmethod): - return staticmethod[params, ret] + return staticmethod[tuple[*params], ret] elif isinstance(func, classmethod): - return classmethod[specified_receiver, params[1:], ret] + return classmethod[specified_receiver, tuple[*params[1:]], ret] else: return typing.Callable[params, ret] diff --git a/typemap/type_eval/_eval_typing.py b/typemap/type_eval/_eval_typing.py index 090989f..7862d24 100644 --- a/typemap/type_eval/_eval_typing.py +++ b/typemap/type_eval/_eval_typing.py @@ -174,7 +174,7 @@ def _child_context() -> typing.Iterator[EvalContext]: def eval_typing(obj: typing.Any): with _ensure_context() as ctx: result = _eval_types(obj, ctx) - if result in ctx.known_recursive_types: + if not isinstance(result, list) and result in ctx.known_recursive_types: result = ctx.known_recursive_types[result] return result