autodoc: change :novalue: to :annoation: option

The :novalue: option is now called :annotation: and has an additional feature:
When given with an argument, you can specify what the annotation
of the object will be.
This commit is contained in:
Johannes Dewender 2013-02-27 16:38:55 +01:00
parent ffb825d733
commit 649ab8030c
3 changed files with 39 additions and 10 deletions

View File

@ -201,10 +201,19 @@ inserting them into the page source under a suitable :rst:dir:`py:module`,
but do not offer the options used for automatic member documentation. but do not offer the options used for automatic member documentation.
:rst:dir:`autodata` and :rst:dir:`autoattribute` support :rst:dir:`autodata` and :rst:dir:`autoattribute` support
the ``novalue`` option. No value will be parsed from the code:: the ``annotation`` option.
Without this option, the representation of the object
will be shown in the documentation.
When the option is given without arguments,
only the name of the object will be printed::
.. autodata:: CD_DRIVE .. autodata:: CD_DRIVE
:novalue: :annotation:
You can tell sphinx what should be printed after the name::
.. autodata:: CD_DRIVE
:annotation: = your CD device name
For module data members and class attributes, documentation can either be put For module data members and class attributes, documentation can either be put
into a comment with special formatting (using a ``#:`` to start the comment into a comment with special formatting (using a ``#:`` to start the comment
@ -241,7 +250,8 @@ inserting them into the page source under a suitable :rst:dir:`py:module`,
Comment docs are now allowed on the same line after an assignment. Comment docs are now allowed on the same line after an assignment.
.. versionchanged:: 1.2 .. versionchanged:: 1.2
:rst:dir:`autodata` and :rst:dir:`autoattribute` have a ``novalue`` option :rst:dir:`autodata` and :rst:dir:`autoattribute` have
an ``annotation`` option
.. note:: .. note::

View File

@ -85,6 +85,15 @@ def members_set_option(arg):
return ALL return ALL
return set(x.strip() for x in arg.split(',')) return set(x.strip() for x in arg.split(','))
SUPPRESS = object()
def annotation_option(arg):
if arg is None:
# suppress showing the representation of the object
return SUPPRESS
else:
return arg
def bool_option(arg): def bool_option(arg):
"""Used to convert flag options to auto directives. (Instead of """Used to convert flag options to auto directives. (Instead of
directives.flag(), which returns None). directives.flag(), which returns None).
@ -1097,8 +1106,8 @@ class DataDocumenter(ModuleLevelDocumenter):
objtype = 'data' objtype = 'data'
member_order = 40 member_order = 40
priority = -10 priority = -10
option_spec = ModuleLevelDocumenter.option_spec option_spec = dict(ModuleLevelDocumenter.option_spec)
option_spec["novalue"] = bool_option option_spec["annotation"] = annotation_option
@classmethod @classmethod
def can_document_member(cls, member, membername, isattr, parent): def can_document_member(cls, member, membername, isattr, parent):
@ -1106,13 +1115,18 @@ class DataDocumenter(ModuleLevelDocumenter):
def add_directive_header(self, sig): def add_directive_header(self, sig):
ModuleLevelDocumenter.add_directive_header(self, sig) ModuleLevelDocumenter.add_directive_header(self, sig)
if not self.options.novalue: if not self.options.annotation:
try: try:
objrepr = safe_repr(self.object) objrepr = safe_repr(self.object)
except ValueError: except ValueError:
pass pass
else: else:
self.add_line(u' :annotation: = ' + objrepr, '<autodoc>') self.add_line(u' :annotation: = ' + objrepr, '<autodoc>')
elif self.options.annotation is SUPPRESS:
pass
else:
self.add_line(u' :annotation: %s' % self.options.annotation,
'<autodoc>')
def document_members(self, all_members=False): def document_members(self, all_members=False):
pass pass
@ -1184,8 +1198,8 @@ class AttributeDocumenter(ClassLevelDocumenter):
""" """
objtype = 'attribute' objtype = 'attribute'
member_order = 60 member_order = 60
option_spec = ModuleLevelDocumenter.option_spec option_spec = dict(ModuleLevelDocumenter.option_spec)
option_spec["novalue"] = bool_option option_spec["annotation"] = annotation_option
# must be higher than the MethodDocumenter, else it will recognize # must be higher than the MethodDocumenter, else it will recognize
# some non-data descriptors as methods # some non-data descriptors as methods
@ -1221,13 +1235,18 @@ class AttributeDocumenter(ClassLevelDocumenter):
def add_directive_header(self, sig): def add_directive_header(self, sig):
ClassLevelDocumenter.add_directive_header(self, sig) ClassLevelDocumenter.add_directive_header(self, sig)
if not self._datadescriptor and not self.options.novalue: if not self._datadescriptor and not self.options.annotation:
try: try:
objrepr = safe_repr(self.object) objrepr = safe_repr(self.object)
except ValueError: except ValueError:
pass pass
else: else:
self.add_line(u' :annotation: = ' + objrepr, '<autodoc>') self.add_line(u' :annotation: = ' + objrepr, '<autodoc>')
elif self.options.annotation is SUPPRESS:
pass
else:
self.add_line(u' :annotation: %s' % self.options.annotation,
'<autodoc>')
def add_content(self, more_content, no_docstring=False): def add_content(self, more_content, no_docstring=False):
if not self._datadescriptor: if not self._datadescriptor:

View File

@ -38,7 +38,7 @@ def setup_module():
special_members = False, special_members = False,
show_inheritance = False, show_inheritance = False,
noindex = False, noindex = False,
novalue = False, annotation = None,
synopsis = '', synopsis = '',
platform = '', platform = '',
deprecated = False, deprecated = False,