def extract_info(self, module):
"""
.. py:attribute:: extract_info()
This function loop over parser object and extracts the informations
(contains name, documentation, line number etc.) for function, class
and attribute objects.
:rtype: dict
.. note::
"""
def extracter(root_nod):
for node in root_nod.body:
if isinstance(node, ast.ClassDef):
yield {
"name": node.name,
"lineno": node.lineno - 1,
"docstring": ast.get_docstring(node),
"type": 'class'}
for sub_node in node.body:
args_ = []
if isinstance(sub_node, ast.FunctionDef):
for arg in sub_node.args.args:
try:
args_.append(arg.id)
except AttributeError:
args_.extend([item.id for item in arg.elts if item.id != 'self'])
yield {
"name": sub_node.name,
"lineno": sub_node.lineno - 1,
"docstring": ast.get_docstring(sub_node),
"type": 'attribute',
"args": args_,
"header": ''}
for n in extracter(sub_node):
yield n
elif isinstance(node, ast.FunctionDef):
args_ = []
for arg in node.args.args:
try:
args_.append(arg.id)
except AttributeError:
args_.extend([item.id for item in arg])
yield {
"name": node.name,
"lineno": node.lineno - 1,
"docstring": ast.get_docstring(node),
"type": 'function',
"args": args_}
for n in extracter(node):
yield n
return extracter(module)
评论列表
文章目录