From 8b44fe62d88bdbf95b3efcad9a2b3752682a187d Mon Sep 17 00:00:00 2001 From: Arsam Date: Mon, 27 Nov 2023 23:39:15 +0100 Subject: [PATCH] Fixed a bug where attributes with call expressions as type hint would get "Any" as type --- .../api_analyzer/_ast_visitor.py | 5 ++- .../__snapshots__/test__get_api.ambr | 36 +++++++++---------- .../__snapshots__/test_generate_stubs.ambr | 3 +- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/safeds_stubgen/api_analyzer/_ast_visitor.py b/src/safeds_stubgen/api_analyzer/_ast_visitor.py index 3c046655..6a15fac9 100644 --- a/src/safeds_stubgen/api_analyzer/_ast_visitor.py +++ b/src/safeds_stubgen/api_analyzer/_ast_visitor.py @@ -616,7 +616,10 @@ def _create_attribute( raise TypeError("Attribute has an unexpected type.") type_ = None - if attribute_type is not None: + # Ignore types that are special mypy any types + if (attribute_type is not None and + not (isinstance(attribute_type, mp_types.AnyType) and attribute_type.type_of_any in + {mp_types.TypeOfAny.unannotated, mp_types.TypeOfAny.from_error})): type_ = mypy_type_to_abstract_type(attribute_type, unanalyzed_type) # Get docstring diff --git a/tests/safeds_stubgen/api_analyzer/__snapshots__/test__get_api.ambr b/tests/safeds_stubgen/api_analyzer/__snapshots__/test__get_api.ambr index f016936a..a3fc4811 100644 --- a/tests/safeds_stubgen/api_analyzer/__snapshots__/test__get_api.ambr +++ b/tests/safeds_stubgen/api_analyzer/__snapshots__/test__get_api.ambr @@ -102,11 +102,7 @@ 'is_static': True, 'is_type_inferred': False, 'name': 'callexpr_attr', - 'type': dict({ - 'kind': 'NamedType', - 'name': 'Any', - 'qname': '', - }), + 'type': None, }), dict({ 'docstring': dict({ @@ -4243,48 +4239,48 @@ 'types': list([ dict({ 'kind': 'NamedType', - 'name': 'int', + 'name': 'float', 'qname': '', }), dict({ 'kind': 'NamedType', - 'name': 'InferMe', - 'qname': 'tests.data.test_package.infer_types_module.InferMe', + 'name': 'InferMyTypes', + 'qname': 'tests.data.test_package.infer_types_module.InferMyTypes', }), dict({ 'kind': 'NamedType', - 'name': 'None', - 'qname': 'builtins.None', + 'name': 'bool', + 'qname': '', }), dict({ 'kind': 'NamedType', - 'name': 'float', + 'name': 'str', 'qname': '', }), dict({ 'kind': 'NamedType', - 'name': 'bool', - 'qname': 'builtins.bool', + 'name': 'InferMe', + 'qname': 'tests.data.test_package.infer_types_module.InferMe', }), dict({ 'kind': 'NamedType', - 'name': 'str', - 'qname': '', + 'name': 'bool', + 'qname': 'builtins.bool', }), dict({ 'kind': 'NamedType', - 'name': 'bool', - 'qname': '', + 'name': 'None', + 'qname': 'builtins.None', }), dict({ 'kind': 'NamedType', - 'name': 'InferMyTypes', - 'qname': 'tests.data.test_package.infer_types_module.InferMyTypes', + 'name': 'int', + 'qname': 'builtins.int', }), dict({ 'kind': 'NamedType', 'name': 'int', - 'qname': 'builtins.int', + 'qname': '', }), ]), }), diff --git a/tests/safeds_stubgen/stubs_generator/__snapshots__/test_generate_stubs.ambr b/tests/safeds_stubgen/stubs_generator/__snapshots__/test_generate_stubs.ambr index 21fd1a6c..78ccb232 100644 --- a/tests/safeds_stubgen/stubs_generator/__snapshots__/test_generate_stubs.ambr +++ b/tests/safeds_stubgen/stubs_generator/__snapshots__/test_generate_stubs.ambr @@ -54,8 +54,9 @@ static attr noTypeHintPublic: Int @PythonName("object_attr") static attr objectAttr: AttributesClassA + // TODO Attribute has no type information. @PythonName("callexpr_attr") - static attr callexprAttr: Any + static attr callexprAttr // TODO Safe-DS does not support tuple types. @PythonName("tuple_attr_1") static attr tupleAttr1: Tuple