diff options
| author | Georg Brandl <georg@python.org> | 2011-01-08 15:16:38 +0100 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2011-01-08 15:16:38 +0100 |
| commit | 4728d8379beb1fb91c096f0973864fc246a0dc29 (patch) | |
| tree | a47673f069028a0e3b42dd697db46bfcda4e1fcb /sphinx/domains/python.py | |
| parent | 7f1e43cbf9baf8ca1e88f8aac4c0d970946f682c (diff) | |
| parent | 53e6c23f52e9c0f76a4eb04d883a051f5e2dd0e0 (diff) | |
| download | sphinx-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.py | 68 |
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 = [] |
