python - 我怎样才能用 sphinx/autodoc 列出未记录的成员?

标签 python python-sphinx autodoc

我正在使用 sphinxautodoc 扩展,并且想生成一个列表包含几个模块中未记录的成员函数,而不是记录在案的成员。

我可以成功地创建一个包含记录成员和未记录成员的列表,如下所示:

.. automodule:: module
    :members:
    :undoc-members:

如预期的那样,单独使用 :members: 指令仅创建记录成员列表。

.. automodule:: module
    :members:

但是单独使用 :undoc-members: 指令(即省略 :members: 标志)根本不会产生任何列表:

.. automodule:: module
    :undoc-members:

有没有办法自动生成这个?

(主要文档包括一个显示所有已记录成员的页面,但我发现通过在一个页面上列出任何未记录的成员而不显示已记录的文本)。

最佳答案

覆盖 autodoc-process-docstring 事件(如@delnan 所述)可以提供帮助,方法是将以下内容添加到 conf.py:

# set up the types of member to check that are documented
members_to_watch = ['function',];

def warn_undocumented_members(app, what, name, obj, options, lines):
    if(what in members_to_watch and len(lines)==0):
        # warn to terminal during build
        print "Warning: ", what, "is undocumented: ", name, "(%d)"% len(lines);
        # or modify the docstring so the rendered output is highlights the omission
        lines.append(".. Warning:: %s '%s' undocumented" % (what, name));

然后将此函数连接到事件(来自 this SO thread 中的答案):

def setup(app):
    app.connect('autodoc-process-docstring', warn_undocumented_members);

要打开(关闭)警告,包括(排除)undoc-members——全局使用 conf.py 中的 autodoc_default_flags,或者使用两个指令,如问题。

autodoc_default_flags = ['members', 'undoc-members' ]
#autodoc_default_flags = ['members' ]

编辑:

我试图通过以下方法扩展这种方法以仅生成 undoc 成员:

  • 在函数 warn_undocumented_members 期间有条件地设置对象的属性,例如 warn_undoc=True(上文)
  • 将第二个覆盖函数附加到预处理器事件 autodoc-skip-member,如果它们没有设置warn_undoc,则跳过所有成员。

但是,进一步的调查排除了这种方法,因为 autodoc-skip-memberautodoc-process-docstring 发生之前针对每组成员发生。因此,属性设置得太晚,无法根据文档字符串的存在/不存在有条件地跳过。

关于python - 我怎样才能用 sphinx/autodoc 列出未记录的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14141170/

相关文章:

python - 在 python 中进行组合

python - 当页面上不存在该短语时,"Searching..."需要永远读取文档

python - Sphinx 自动文档与 Django 1.4

python - 将列表与列表列表连接起来

python - 将 curl 命令转换为 Python 请求

python - Python 中的 x%(1e9 + 7) 和 x%(10**9 + 7) 不同吗?如果是,为什么?

python - 如何在长函数签名中换行并在 Sphinx autodoc 中对其进行漂亮的格式化

python - 如何使用 Intersphinx 引用特定文档中的类?

python - 可以告诉 Sphinx "automodule"在成员之间自动插入分节符吗?

python - 为什么 sphinx automodule 不显示任何模块成员?