diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py index a749b8745..5c8780bfc 100644 --- a/sphinx/domains/python.py +++ b/sphinx/domains/python.py @@ -843,7 +843,10 @@ class PyAttribute(PyObject): typ = self.options.get('type') if typ: annotations = _parse_annotation(typ, self.env) - signode += addnodes.desc_annotation(typ, '', nodes.Text(': '), *annotations) + signode += addnodes.desc_annotation(typ, '', + addnodes.desc_sig_punctuation('', ':'), + addnodes.desc_sig_space(), + *annotations) value = self.options.get('value') if value: diff --git a/tests/test_domain_py.py b/tests/test_domain_py.py index 133427f82..f22f75c6c 100644 --- a/tests/test_domain_py.py +++ b/tests/test_domain_py.py @@ -835,15 +835,16 @@ def test_pyattribute(app): assert_node(doctree[1][1][0], addnodes.index, entries=[('single', 'attr (Class attribute)', 'Class.attr', '', None)]) assert_node(doctree[1][1][1], ([desc_signature, ([desc_name, "attr"], - [desc_annotation, (": ", + [desc_annotation, ([desc_sig_punctuation, ':'], + desc_sig_space, [pending_xref, "Optional"], [desc_sig_punctuation, "["], [pending_xref, "str"], [desc_sig_punctuation, "]"])], [desc_annotation, " = ''"])], [desc_content, ()])) - assert_node(doctree[1][1][1][0][1][1], pending_xref, **{"py:class": "Class"}) - assert_node(doctree[1][1][1][0][1][3], pending_xref, **{"py:class": "Class"}) + assert_node(doctree[1][1][1][0][1][2], pending_xref, **{"py:class": "Class"}) + assert_node(doctree[1][1][1][0][1][4], pending_xref, **{"py:class": "Class"}) assert 'Class.attr' in domain.objects assert domain.objects['Class.attr'] == ('index', 'Class.attr', 'attribute', False)