从 epydoc 的文档字符串格式切换到狮身人面像文档字符串格式的自动方法?



我有一个使用 epydoc 记录的项目。现在我正在尝试切换到狮身人面像。我为 epydocs 格式化了我所有的文档字符串,使用 B{}、L{} 等进行粗体、链接等,并使用 @param、@return、@raise 等来解释输入、输出、异常等。

所以现在我切换到狮身人面像,它失去了所有这些功能。有没有一种自动方法可以将为 epydocs 格式化的文档字符串转换为为 sphinx 格式化的文档字符串?

为了扩展Kevin Horn的答案,可以在由autodoc-process-docstring事件触发的事件处理程序中动态翻译文档字符串。

下面是一个小演示(通过将代码添加到 conf.py 来尝试(。它用:替换了一些常见的Epytext字段中的@字符,用于相应的狮身人面像字段。

import re
re_field = re.compile('@(param|type|rtype|return)') 
def fix_docstring(app, what, name, obj, options, lines):
    for i in xrange(len(lines)):
        lines[i] = re_field.sub(r':1', lines[i])
def setup(app):
    app.connect('autodoc-process-docstring', fix_docstring)

Pyment是一个可以转换Python文档字符串并创建缺失骨架的工具。它可以管理Google,Epydoc(javadoc风格(,Numpydoc,reStructuredText(reST,Sphinx默认(文档字符串格式。

它接受单个文件或文件夹(也浏览子文件夹(。对于每个文件,它将识别每个文档字符串格式并将其转换为所需的格式。最后,将生成一个补丁以应用于该文件。

要转换项目:

  • 安装皮门特

键入以下内容(您可以使用虚拟环境(:

$ git clone https://github.com/dadadel/pyment.git
$ cd pyment
$ python setup.py install
  • 从 Epydoc 转换为狮身人面像

您可以通过执行以下操作将项目转换为 Sphinx 格式 (reST(,这是默认输出格式:

$ pyment /my/folder/project
理论上,

你可以编写一个狮身人面像扩展,它可以捕获当文档字符串被读取时触发的任何事件(也许是source_read?(,并即时翻译文档字符串。

我在理论上说是因为:

  1. 很长一段时间以来,我一直想写这样的东西,但还没有设法解决它。
  2. 翻译这样的东西总是比看起来更难。

你也可以尝试用Sphinx之外的类似翻译器替换代码中的所有文档字符串,也许使用ast模块或类似的东西。

正如其中

一条评论所建议的那样,sphinx-epytext确实提供了相关的支持。它如何为我工作:

安装它非常简单:

pip install -U sphinx-epytext

它包含一个文件process_docstring.py,通过将 @ epytext 标记替换为冒号:将 epytext 标记转换为 reStructuredText 标记。

我发现其中缺少的一些字段是:ivar, var, cvar, vartype

只需将现有列表扩展FIELDS

FIELDS.extend(['ivar', 'var', 'cvar', 'vartype'])

Epytext理解变量的@type,但狮身人面像理解:vartype

要解决此问题,请在方法中用较process_docstring替换以前的。

Sphinx 无法理解的大多数语法或文档字符串部分都报告为警告。您可以通过运行带有 -w <WarningLogFile>sphinx-build 来记录这些警告。根据我的经验,狮身人面像对字段应该如何开始或结束、缺少格式语法等非常敏感。