From 23005e25c635a659819f75a72dbc2552cc2b2071 Mon Sep 17 00:00:00 2001 From: Shengyu Zhang Date: Mon, 16 Feb 2026 13:07:19 +0800 Subject: [PATCH] feat: Add localtoc entry support for object descriptions Set _toc_parts and _toc_name attributes on desc_signature nodes to integrate with Sphinx's TocTreeCollector for localtoc generation. Co-authored-by: MiniMax-M2.5 Co-authored-by: opencode --- src/sphinxnotes/any/domain.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/sphinxnotes/any/domain.py b/src/sphinxnotes/any/domain.py index 1431cb6..e087a46 100644 --- a/src/sphinxnotes/any/domain.py +++ b/src/sphinxnotes/any/domain.py @@ -370,6 +370,11 @@ def setup_objdesc(self, pending: pending_node, rendered: list[nodes.Node]) -> No descnode = addnodes.desc('', signode, contnode) self.update_domain_atts(descnode) + domain, objtype = self.get_domain_and_type() + self.env.events.emit( + 'object-description-transform', domain.name, objtype, contnode + ) + # Replace the pass-in node list. rendered.clear() rendered.append(descnode) @@ -417,6 +422,22 @@ def setup_anchor(self, ahrnode: nodes.Element, obj: Object) -> None: blkparent = find_nearest_block_element(ahrnode) or self.state.document blkparent += report + def setup_toc_name( + self, signode: addnodes.desc_signature, rendered: list[nodes.Node] + ) -> None: + """Set TOC entry attributes for localtoc generation. + + See TocTreeCollector in sphinx/environment/collectors/toctree.py. + """ + if not self.config.toc_object_entries: + signode['_toc_parts'] = () + signode['_toc_name'] = '' + return + + toc_name = ''.join(n.astext() for n in rendered) + signode['_toc_parts'] = (toc_name,) + signode['_toc_name'] = toc_name + def setup_signode_anchor( self, pending: pending_node, rendered: list[nodes.Node] ) -> None: @@ -426,6 +447,7 @@ def setup_signode_anchor( assert isinstance(obj, ParsedData) self.setup_anchor(ahrnode, obj) + self.setup_toc_name(ahrnode, rendered) class AutoObjDefineDirective(ObjDefineDirective):