Разбор строк документации модуля Python - PullRequest
3 голосов
/ 31 января 2012

Можно ли анализировать строки документации на уровне модуля с помощью AST?

Я работаю над документатором Python здесь , а посещение токенов модуля и получение документации не дает модулядокументная строкаДо сих пор мне приходилось прибегать к импорту модуля и захвату его __doc__ или использованию inspect для получения документации.

Я искал в источнике модуль pydoc источник подсказокотносительно того, как другие документирующие средства анализируют строки документации, и обнаружил, что pydoc в конечном итоге вынужден делать в основном то же самое, что и мой документер, чтобы получить строки уровня модуля.

Я что-то упустил?Является ли единственным способом синтаксического анализа строк документации на уровне модуля путем фактического импорта модуля или же можно выполнить прямой анализ строк документации из AST?

1 Ответ

4 голосов
/ 03 февраля 2012

Может быть, я неправильно понимаю вопрос, но вы не можете просто сделать это (python 2.7.1)?

тестовый файл:

"""
DOC STRING!!
"""

def hello():
    'doc string'
    print 'hello'

hello()

Интерактивная сессия:

>>> M = ast.parse(''.join(open('test.py')))
>>> ast.get_docstring(M)
'DOC STRING!!'

Вы также можете пройти через ast, ища слот, в котором будет находиться строка документа.

>>> M._fields
('body',)
>>> M.body
[<_ast.Expr object at 0x10e5ac710>, <_ast.FunctionDef object at 0x10e5ac790>, <_ast.Expr object at 0x10e5ac910>]
>>> # doc would be in the first slot
>>> M.body[0]._fields
('value',)
>>> M.body[0].value
<_ast.Str object at 0x10e5ac750>
>>> # it contains a string object, so maybe it's the doc string
>>> M.body[0].value._fields
('s',)
>>> M.body[0].value.s
'\nDOC STRING!!\n'
...