1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 from logilab.common.decorators import monkeypatch
19
20 from sphinx.ext import autodoc
23 objtype = 'docstring'
30
32 if modname is not None:
33 return modname, parents + [base]
34 return (path or '') + base, []
35
41
42
43
44 from sphinx.ext.autodoc import (ViewList, Options, AutodocReporter, nodes,
45 assemble_option_dict, nested_parse_with_titles)
46
47 @monkeypatch(autodoc.AutoDirective)
48 -def run(self):
49 self.filename_set = set()
50 self.reporter = self.state.document.reporter
51 self.env = self.state.document.settings.env
52 self.warnings = []
53 self.result = ViewList()
54
55
56 objtype = self.name[4:]
57 doc_class = self._registry[objtype]
58
59 self.genopt = Options(assemble_option_dict(
60 self.options.items(), doc_class.option_spec))
61
62 documenter = doc_class(self, self.arguments[0])
63 documenter.generate(more_content=self.content)
64 if not self.result:
65 return self.warnings
66
67
68
69 for fn in self.filename_set:
70 self.env.note_dependency(fn)
71
72
73
74 old_reporter = self.state.memo.reporter
75 self.state.memo.reporter = AutodocReporter(self.result,
76 self.state.memo.reporter)
77 if self.name in ('automodule', 'autodocstring'):
78 node = nodes.section()
79
80 node.document = self.state.document
81 nested_parse_with_titles(self.state, self.result, node)
82 else:
83 node = nodes.paragraph()
84 node.document = self.state.document
85 self.state.nested_parse(self.result, 0, node)
86 self.state.memo.reporter = old_reporter
87 return self.warnings + node.children
88