首页 > 解决方案 > 收集警告并让 Sphinx 提升它们

问题描述

我正在使用autodoc-process-docstring来检查无证成员

def warn_undocumented_members(app, what, name, obj, options, lines):
    if what in MEMBERS_TO_WARN and not lines:
        sys.stderr.write("<autodoc> WARNING: {} is undocumented: {}\n".format(what, name))

app.connect('autodoc-process-docstring', warn_undocumented_members)

有没有可能在 Sphinx 中冒泡警告?

我查看了 app 对象,但找不到任何令人满意的东西。我发现的唯一一件事是在 if 子句中引发SphinxError,但这是停止构建而不是收集所有警告。这也不尊重(我总是有一个硬错误)的-W标志。sphinx-build

标签: pythonpython-sphinxautodoc

解决方案


Sphinx 组件通过该logging设施传递警告,为此 Sphinx 在sphinx.util.logging. 如果您使用那里提供的记录器,Sphinx 会将您的警告与它自己的警告相同,并尊重-W将它们变成错误的标志。

import sphinx
logger = sphinx.util.logging.getLogger('sphinx.ext.autodoc')

def warn_undocumented_members(app, what, name, obj, options, lines):
    if what in MEMBERS_TO_WARN and not lines:
        logger.warning(f'{what} is undocumented: {name}', type='autodoc')

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

推荐阅读