diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index 585b0e25b..82e16e044 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -404,7 +404,7 @@ class Documenter(object): try: ret.append((mname, self.get_attr(self.object, mname))) except AttributeError: - self.directive.warn('missing attribute %s in object %s: ' + self.directive.warn('missing attribute %s in object %s' % (mname, self.fullname)) return False, ret elif self.options.inherited_members: diff --git a/tests/test_autodoc.py b/tests/test_autodoc.py index 98fe4c19c..d1da44396 100644 --- a/tests/test_autodoc.py +++ b/tests/test_autodoc.py @@ -14,9 +14,8 @@ from util import * from docutils.statemachine import ViewList -from sphinx.ext.autodoc import AutoDirective, Documenter, ModuleDocumenter, \ - ClassDocumenter, FunctionDocumenter, DataDocumenter, MethodDocumenter, \ - AttributeDocumenter, cut_lines, between, ALL +from sphinx.ext.autodoc import AutoDirective, Documenter, add_documenter, \ + ModuleLevelDocumenter, FunctionDocumenter, cut_lines, between, ALL def setup_module(): @@ -281,6 +280,33 @@ def test_docstring_processing(): app.disconnect(lid) +def test_new_documenter(): + class MyDocumenter(ModuleLevelDocumenter): + objtype = 'integer' + directivetype = 'data' + priority = 100 + + @classmethod + def can_document_member(cls, member, membername, isattr, parent): + return isinstance(member, int) + + def document_members(self, all_members=False): + return + + add_documenter(MyDocumenter) + + def assert_result_contains(item, objtype, name, **kw): + inst = AutoDirective._registry[objtype](directive, name) + inst.generate(**kw) + #print '\n'.join(directive.result) + assert len(_warnings) == 0, _warnings + assert item in directive.result + del directive.result[:] + + options.members = ['integer'] + assert_result_contains('.. data:: integer', 'module', 'test_autodoc') + + def test_generate(): def assert_warns(warn_str, objtype, name, **kw): inst = AutoDirective._registry[objtype](directive, name) @@ -312,6 +338,8 @@ def test_generate(): assert item in directive.result del directive.result[:] + options.members = [] + # no module found? assert_warns("import for autodocumenting 'foobar'", 'function', 'foobar', more_content=None) @@ -405,13 +433,14 @@ def test_generate(): __all__ = ['Class'] +integer = 1 + class CustomEx(Exception): """My custom exception.""" def f(self): """Exception method.""" - class Base(object): def inheritedmeth(self): """Inherited function."""