From c1da955df2f14ffc5a686b8724d46369abf847d4 Mon Sep 17 00:00:00 2001 From: Jakob Lykke Andersen Date: Sat, 20 Mar 2021 18:02:07 +0100 Subject: [PATCH] Decl styling, use a post-transform to get the domain name in the desc_signature nodes --- sphinx/addnodes.py | 3 ++- sphinx/transforms/post_transforms/__init__.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/sphinx/addnodes.py b/sphinx/addnodes.py index 69d11eb53..23cf0acb8 100644 --- a/sphinx/addnodes.py +++ b/sphinx/addnodes.py @@ -158,8 +158,9 @@ class desc_signature(_desc_classes_injector, nodes.Part, nodes.Inline, nodes.Tex Set ``is_multiline = True`` to describe a multi-line signature. In that case all child nodes must be :py:class:`desc_signature_line` nodes. - This node always has the classes ``sig`` and ``sig-object``. + This node always has the classes ``sig``, ``sig-object``, and the domain it belongs to. """ + # Note: the domain name is being added through a post-transform DescSigAddDomainAsClass classes = ['sig', 'sig-object'] @property diff --git a/sphinx/transforms/post_transforms/__init__.py b/sphinx/transforms/post_transforms/__init__.py index 76a709f5f..b70677e4f 100644 --- a/sphinx/transforms/post_transforms/__init__.py +++ b/sphinx/transforms/post_transforms/__init__.py @@ -232,10 +232,20 @@ class SigElementFallbackTransform(SphinxPostTransform): node.replace_self(newnode) +class DescSigAddDomainAsClass(SphinxPostTransform): + """Add the domain name of the parent node as a class in each desc_signature node.""" + default_priority = 200 + + def run(self, **kwargs: Any) -> None: + for node in self.document.traverse(addnodes.desc_signature): + node['classes'].append(node.parent['domain']) + + def setup(app: Sphinx) -> Dict[str, Any]: app.add_post_transform(ReferencesResolver) app.add_post_transform(OnlyNodeTransform) app.add_post_transform(SigElementFallbackTransform) + app.add_post_transform(DescSigAddDomainAsClass) return { 'version': 'builtin',