Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 44 additions & 47 deletions support/python/mkdocstrings_handlers/cxx/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -302,58 +302,56 @@ def __init__(
self._file_doxyxml: "ET.ElementTree[ET.Element[str]] | None" = None
for h in headers:
filename = h.replace(".h", "_8h.xml")
with open(os.path.join(self._doxyxml_dir, filename)) as f:
doxyxml = ET.parse(f)
if self._file_doxyxml is None:
self._file_doxyxml = doxyxml
continue
root = self._file_doxyxml.getroot()
for node in doxyxml.getroot():
root.append(node)
doxyxml = ET.parse(os.path.join(self._doxyxml_dir, filename))
if self._file_doxyxml is None:
self._file_doxyxml = doxyxml
continue
root = self._file_doxyxml.getroot()
for node in doxyxml.getroot():
root.append(node)

def collect_compound(self, identifier: str, cls: "list[ET.Element]") -> Definition:
"""Collect a compound definition such as a struct."""
refid = cls[0].get("refid")
if refid is None:
raise ValueError
path = os.path.join(self._doxyxml_dir, refid + ".xml")
with open(path) as f:
xml = ET.parse(f)
node = xml.find("compounddef")
if node is None:
xml = ET.parse(path)
node = xml.find("compounddef")
if node is None:
raise ValueError
d = Definition(identifier, node=node)
d.template_params = convert_template_params(node)
d.desc = get_description(node)
d.members = []
for m in node.findall(
'sectiondef[@kind="public-attrib"]/memberdef'
) + node.findall('sectiondef[@kind="public-func"]/memberdef'):
name = m.find("name")
if name is None or name.text is None:
raise ValueError
d = Definition(identifier, node=node)
d.template_params = convert_template_params(node)
d.desc = get_description(node)
d.members = []
for m in node.findall(
'sectiondef[@kind="public-attrib"]/memberdef'
) + node.findall('sectiondef[@kind="public-func"]/memberdef'):
name = m.find("name")
if name is None or name.text is None:
raise ValueError
name = name.text
# Doxygen incorrectly classifies members of private unnamed unions as
# public members of the containing class.
if name.endswith("_"):
continue
desc = get_description(m)
if len(desc) == 0:
continue
kind = m.get("kind")
member = Definition(name if name else "", kind=kind, is_member=True)
type_ = m.find("type")
if type_ is None:
raise ValueError
type_text = type_.text
member.type = type_text if type_text else ""
if kind == "function":
member.params = convert_params(m)
convert_return_type(member, m)
member.template_params = None
member.desc = desc
d.members.append(member)
return d
name = name.text
# Doxygen incorrectly classifies members of private unnamed unions as
# public members of the containing class.
if name.endswith("_"):
continue
desc = get_description(m)
if len(desc) == 0:
continue
kind = m.get("kind")
member = Definition(name if name else "", kind=kind, is_member=True)
type_ = m.find("type")
if type_ is None:
raise ValueError
type_text = type_.text
member.type = type_text if type_text else ""
if kind == "function":
member.params = convert_params(m)
convert_return_type(member, m)
member.template_params = None
member.desc = desc
d.members.append(member)
return d

@override
def collect(self, identifier: str, options: "Mapping[str, Any]") -> Definition:
Expand All @@ -371,9 +369,8 @@ def collect(self, identifier: str, options: "Mapping[str, Any]") -> Definition:
doxyxml = self._ns2doxyxml.get(namespace)
if doxyxml is None:
path = f"namespace{namespace.replace('::', '_1_1')}.xml"
with open(os.path.join(self._doxyxml_dir, path)) as f:
doxyxml = ET.parse(f)
self._ns2doxyxml[namespace] = doxyxml
doxyxml = ET.parse(os.path.join(self._doxyxml_dir, path))
self._ns2doxyxml[namespace] = doxyxml

nodes = doxyxml.findall(f"compounddef/sectiondef/memberdef/name[.='{name}']/..")
if len(nodes) == 0:
Expand Down
Loading