def transplant_nodes(parent: Element, new_parent: Element, start: Node, end: Node) -> Element: start_pos = parent.index(start) end_pos = parent.index(end) for _ in range(start_pos + 1, end_pos): # Note: do not use Element.remove() here. # It removes wrong node if the target is Text. subnode = parent.pop(start_pos + 1) new_parent += subnode return new_parent
def insert_field_list(node: Element) -> nodes.field_list: field_list = nodes.field_list() desc = [n for n in node if isinstance(n, addnodes.desc)] if desc: # insert just before sub object descriptions (ex. methods, nested classes, etc.) index = node.index(desc[0]) node.insert(index - 1, [field_list]) else: node += field_list return field_list