@@ -144,6 +144,11 @@ def handle_value(self, value: Any) -> Value:
144144 result = super ().handle_value (value )
145145 if inspect .isroutine (value ) and result .is_print_safe :
146146 self ._add_import (QualifiedName .from_str (result .repr ))
147+ else :
148+ type_ = type (value )
149+ self ._add_import (
150+ QualifiedName .from_str (f"{ type_ .__module__ } .{ type_ .__qualname__ } " )
151+ )
147152 return result
148153
149154 def parse_annotation_str (
@@ -159,7 +164,9 @@ def _add_import(self, name: QualifiedName) -> None:
159164 return
160165 if len (name ) == 1 and len (name [0 ]) == 0 :
161166 return
162- if hasattr (builtins , name [0 ]):
167+ if len (name ) == 1 and hasattr (builtins , name [0 ]):
168+ return
169+ if len (name ) > 0 and name [0 ] == "builtins" :
163170 return
164171 if self .__current_class is not None and hasattr (self .__current_class , name [0 ]):
165172 return
@@ -171,6 +178,8 @@ def _add_import(self, name: QualifiedName) -> None:
171178 if module_name is None :
172179 self .report_error (NameResolutionError (name ))
173180 return
181+ if self .__current_module .__name__ == str (module_name ):
182+ return
174183 self .__extra_imports .add (Import (name = None , origin = module_name ))
175184
176185 def _get_parent_module (self , name : QualifiedName ) -> QualifiedName | None :
@@ -913,8 +922,6 @@ def parse_annotation_str(
913922 except ValueError :
914923 pass
915924 else :
916- # call `handle_type` to trigger implicit import
917- self .handle_type (FixedSize )
918925 return self .handle_value (FixedSize (* dimensions ))
919926 return result
920927
0 commit comments