@@ -41,9 +41,7 @@ def _auto_package(mod: dc.Module) -> list[Section]:
41
41
# get module members for content ----
42
42
contents = []
43
43
for name , member in mod .members .items ():
44
- external_alias = member .is_alias and not member .target_path .startswith (
45
- mod .name .split ("." )[0 ]
46
- )
44
+ external_alias = _is_external_alias (member , mod )
47
45
if external_alias or member .is_module or name .startswith ("__" ):
48
46
continue
49
47
@@ -59,6 +57,35 @@ def _auto_package(mod: dc.Module) -> list[Section]:
59
57
return [Section (title = mod .name , desc = desc , contents = contents )]
60
58
61
59
60
+ def _is_external_alias (obj : dc .Alias | dc .Object , mod : dc .Module ):
61
+ package_name = mod .name .split ("." )[0 ]
62
+
63
+ if not isinstance (obj , dc .Alias ):
64
+ return False
65
+
66
+ crnt_target = obj
67
+
68
+ while crnt_target .is_alias :
69
+ if not crnt_target .target_path .startswith (package_name ):
70
+ return True
71
+
72
+ try :
73
+ new_target = crnt_target .modules_collection .get_member (
74
+ crnt_target .target_path
75
+ )
76
+ if new_target is crnt_target :
77
+ raise Exception (f"Cyclic Alias: { new_target } " )
78
+
79
+ crnt_target = new_target
80
+
81
+ except KeyError :
82
+ # assumes everything from module was loaded, so target must
83
+ # be outside module
84
+ return True
85
+
86
+ return False
87
+
88
+
62
89
def _to_simple_dict (el ):
63
90
# round-trip to json, so we can take advantage of pydantic
64
91
# dumping Enums, etc.. There may be a simple way to do
@@ -198,7 +225,10 @@ def enter(self, el: Auto):
198
225
obj_member = self .get_object_fixed (member_path , dynamic = dynamic )
199
226
200
227
# do no document submodules
201
- if obj_member .kind .value == "module" :
228
+ if (
229
+ _is_external_alias (obj_member , obj .package )
230
+ or obj_member .kind .value == "module"
231
+ ):
202
232
continue
203
233
204
234
# create element for child ----
0 commit comments