summaryrefslogtreecommitdiff
path: root/sphinx/domains/python.py
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2011-01-08 15:16:38 +0100
committerGeorg Brandl <georg@python.org>2011-01-08 15:16:38 +0100
commit4728d8379beb1fb91c096f0973864fc246a0dc29 (patch)
treea47673f069028a0e3b42dd697db46bfcda4e1fcb /sphinx/domains/python.py
parent7f1e43cbf9baf8ca1e88f8aac4c0d970946f682c (diff)
parent53e6c23f52e9c0f76a4eb04d883a051f5e2dd0e0 (diff)
downloadsphinx-4728d8379beb1fb91c096f0973864fc246a0dc29.tar.gz
merge with https://bitbucket.org/dhellmann/sphinx-graphviz-paragraphs/
Diffstat (limited to 'sphinx/domains/python.py')
-rw-r--r--sphinx/domains/python.py68
1 files changed, 52 insertions, 16 deletions
diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py
index e3090a29..0dbd883c 100644
--- a/sphinx/domains/python.py
+++ b/sphinx/domains/python.py
@@ -5,7 +5,7 @@
The Python domain.
- :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
+ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
@@ -94,10 +94,12 @@ class PyObject(ObjectDescription):
TypedField('parameter', label=l_('Parameters'),
names=('param', 'parameter', 'arg', 'argument',
'keyword', 'kwarg', 'kwparam'),
- typerolename='obj', typenames=('paramtype', 'type')),
+ typerolename='obj', typenames=('paramtype', 'type'),
+ can_collapse=True),
TypedField('variable', label=l_('Variables'), rolename='obj',
names=('var', 'ivar', 'cvar'),
- typerolename='obj', typenames=('vartype',)),
+ typerolename='obj', typenames=('vartype',),
+ can_collapse=True),
GroupedField('exceptions', label=l_('Raises'), rolename='exc',
names=('raises', 'raise', 'exception', 'except'),
can_collapse=True),
@@ -219,7 +221,7 @@ class PyObject(ObjectDescription):
indextext = self.get_index_text(modname, name_cls)
if indextext:
self.indexnode['entries'].append(('single', indextext,
- fullname, fullname))
+ fullname, ''))
def before_content(self):
# needed for automatic qualification of members (reset in subclasses)
@@ -355,6 +357,38 @@ class PyClassmember(PyObject):
self.clsname_set = True
+class PyDecoratorMixin(object):
+ """
+ Mixin for decorator directives.
+ """
+ def handle_signature(self, sig, signode):
+ ret = super(PyDecoratorMixin, self).handle_signature(sig, signode)
+ signode.insert(0, addnodes.desc_addname('@', '@'))
+ return ret
+
+ def needs_arglist(self):
+ return False
+
+
+class PyDecoratorFunction(PyDecoratorMixin, PyModulelevel):
+ """
+ Directive to mark functions meant to be used as decorators.
+ """
+ def run(self):
+ # a decorator function is a function after all
+ self.name = 'py:function'
+ return PyModulelevel.run(self)
+
+
+class PyDecoratorMethod(PyDecoratorMixin, PyClassmember):
+ """
+ Directive to mark methods meant to be used as decorators.
+ """
+ def run(self):
+ self.name = 'py:method'
+ return PyClassmember.run(self)
+
+
class PyModule(Directive):
"""
Directive to mark description of a new module.
@@ -397,7 +431,7 @@ class PyModule(Directive):
if not noindex:
indextext = _('%s (module)') % modname
inode = addnodes.index(entries=[('single', indextext,
- 'module-' + modname, modname)])
+ 'module-' + modname, '')])
ret.append(inode)
return ret
@@ -532,16 +566,18 @@ class PythonDomain(Domain):
}
directives = {
- 'function': PyModulelevel,
- 'data': PyModulelevel,
- 'class': PyClasslike,
- 'exception': PyClasslike,
- 'method': PyClassmember,
- 'classmethod': PyClassmember,
- 'staticmethod': PyClassmember,
- 'attribute': PyClassmember,
- 'module': PyModule,
- 'currentmodule': PyCurrentModule,
+ 'function': PyModulelevel,
+ 'data': PyModulelevel,
+ 'class': PyClasslike,
+ 'exception': PyClasslike,
+ 'method': PyClassmember,
+ 'classmethod': PyClassmember,
+ 'staticmethod': PyClassmember,
+ 'attribute': PyClassmember,
+ 'module': PyModule,
+ 'currentmodule': PyCurrentModule,
+ 'decorator': PyDecoratorFunction,
+ 'decoratormethod': PyDecoratorMethod,
}
roles = {
'data': PyXRefRole(),
@@ -579,7 +615,7 @@ class PythonDomain(Domain):
name = name[:-2]
if not name:
- return None, None
+ return []
objects = self.data['objects']
matches = []