mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Add PyAttribute class; a directive for python attribute description
This commit is contained in:
parent
c8334705ca
commit
fcc964b66f
@ -592,6 +592,25 @@ class PyStaticMethod(PyMethod):
|
||||
return _('%s() (%s static method)') % (methname, clsname)
|
||||
|
||||
|
||||
class PyAttribute(PyObject):
|
||||
"""Description of an attribute."""
|
||||
|
||||
def get_index_text(self, modname, name_cls):
|
||||
# type: (str, Tuple[str, str]) -> str
|
||||
name, cls = name_cls
|
||||
try:
|
||||
clsname, attrname = name.rsplit('.', 1)
|
||||
if modname and self.env.config.add_module_names:
|
||||
clsname = '.'.join([modname, clsname])
|
||||
except ValueError:
|
||||
if modname:
|
||||
return _('%s (in module %s)') % (name, modname)
|
||||
else:
|
||||
return name
|
||||
|
||||
return _('%s (%s attribute)') % (attrname, clsname)
|
||||
|
||||
|
||||
class PyDecoratorMixin:
|
||||
"""
|
||||
Mixin for decorator directives.
|
||||
@ -817,7 +836,7 @@ class PythonDomain(Domain):
|
||||
'method': PyMethod,
|
||||
'classmethod': PyClassMethod,
|
||||
'staticmethod': PyStaticMethod,
|
||||
'attribute': PyClassmember,
|
||||
'attribute': PyAttribute,
|
||||
'module': PyModule,
|
||||
'currentmodule': PyCurrentModule,
|
||||
'decorator': PyDecoratorFunction,
|
||||
|
@ -353,3 +353,22 @@ def test_pystaticmethod(app):
|
||||
[desc_content, ()]))
|
||||
assert 'Class.meth' in domain.objects
|
||||
assert domain.objects['Class.meth'] == ('index', 'staticmethod')
|
||||
|
||||
|
||||
def test_pyattribute(app):
|
||||
text = (".. py:class:: Class\n"
|
||||
"\n"
|
||||
" .. py:attribute:: attr\n")
|
||||
domain = app.env.get_domain('py')
|
||||
doctree = restructuredtext.parse(app, text)
|
||||
assert_node(doctree, (addnodes.index,
|
||||
[desc, ([desc_signature, ([desc_annotation, "class "],
|
||||
[desc_name, "Class"])],
|
||||
[desc_content, (addnodes.index,
|
||||
desc)])]))
|
||||
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_content, ()]))
|
||||
assert 'Class.attr' in domain.objects
|
||||
assert domain.objects['Class.attr'] == ('index', 'attribute')
|
||||
|
Loading…
Reference in New Issue
Block a user