5

我的文档字符串引用了我定义的其他 python 类。每次 Sphinx 遇到其中一个类时,我都希望它插入指向该类文档的链接。这在狮身人面像中可能吗?

具体来说,我有一个文档字符串,例如:

'''This class contains a bunch of Foo objects'''

我可以写:

'''This class contains a bunch of :class:`~foo.Foo` objects'''

但我更希望 Sphinx 找到所有匹配的文本Foo并让它看起来好像我输入了 :class:~foo.Foo

4

2 回答 2

8

您可以使用宏。

在我的项目中,我有一个包含所有“重要”类和全局函数及其缩写的头文件。两个示例行:

.. |PostItem| replace:: :class:`PostItem <hklib.PostItem>`
.. |PostNotFoundError| replace:: :class:`PostNotFoundError <hklib.PostNotFoundError>`

在我的rst文件中,我包含了这个头文件。rst然后我可以在任何文件中使用宏:

.. include:: defs.hrst

|PostItem| is a nice class. |PostNotFoundError|, on the other hand is not.

(您也可以使用扩展名包含来自 Python 源文件的文档字符串autogen。其中的宏也将被替换。)

关于您的示例:我将添加Foo到头文件并以这种方式编写文档字符串:

'''This class contains a bunch of |Foo| objects'''
于 2010-03-18T19:01:41.293 回答
2

Sphinx 为此提供了大量的解释文本角色。

https://www.sphinx-doc.org/en/2.0/usage/restructuredtext/domains.html#cross-referencing-python-objects

我想输入 Foo 并让 Sphinx 解释它,就好像我写过 :class:~foo.Foo

这听起来不切实际。似乎它会使 RST 尝试解析您的文本时瘫痪。寻找解释文本和 RST 支持的少数引用规则 ( *_|`) 是关于实用的限制。

您所要求的可能会导致 RST 花费一整天时间检查每个Foo可能的上下文中的每个实例,并推断您是否需要链接。您只希望在 ; 的其他未修饰实例中使用它Foo。琐碎的搜索和替换不起作用。

你可以搞乱文档字符串的预处理。

https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#docstring-preprocessing

这可能允许您在文档字符串文本上尝试全局搜索和替换策略。

于 2010-03-18T18:42:07.493 回答