這是一個猴子補丁(基於Sphinx 1.5.1),禁用ivar
交叉引用。我不確定最佳解決方案是什麼,因此請考慮修補程序作爲實驗性建議。要嘗試它,請將以下代碼添加到conf.py.
from docutils import nodes
from sphinx.util.docfields import TypedField
from sphinx import addnodes
def patched_make_field(self, types, domain, items):
# type: (List, unicode, Tuple) -> nodes.field
def handle_item(fieldarg, content):
par = nodes.paragraph()
par += addnodes.literal_strong('', fieldarg) # Patch: this line added
#par.extend(self.make_xrefs(self.rolename, domain, fieldarg,
# addnodes.literal_strong))
if fieldarg in types:
par += nodes.Text(' (')
# NOTE: using .pop() here to prevent a single type node to be
# inserted twice into the doctree, which leads to
# inconsistencies later when references are resolved
fieldtype = types.pop(fieldarg)
if len(fieldtype) == 1 and isinstance(fieldtype[0], nodes.Text):
typename = u''.join(n.astext() for n in fieldtype)
par.extend(self.make_xrefs(self.typerolename, domain, typename,
addnodes.literal_emphasis))
else:
par += fieldtype
par += nodes.Text(')')
par += nodes.Text(' -- ')
par += content
return par
fieldname = nodes.field_name('', self.label)
if len(items) == 1 and self.can_collapse:
fieldarg, content = items[0]
bodynode = handle_item(fieldarg, content)
else:
bodynode = self.list_type()
for fieldarg, content in items:
bodynode += nodes.list_item('', handle_item(fieldarg, content))
fieldbody = nodes.field_body('', bodynode)
return nodes.field('', fieldname, fieldbody)
TypedField.make_field = patched_make_field
原來TypedField.make_field
方法是在這裏:https://github.com/sphinx-doc/sphinx/blob/master/sphinx/util/docfields.py。
所以,如果你刪除':ivar x:一些描述',錯誤消失? – mzjn
是的,錯誤是由:伊娃,如果我刪除類C,然後我得到沒有錯誤,但在HTML中,我得到一個不需要的符號鏈接從A.x到B.x – crusaderky
我有同樣的問題。它不會發生所有事件:ivar,只有在其他類/模塊使用實例變量的名稱的情況下。有關的事情是:伊娃不應(根據我的理解)創建一個交叉引用 – stochastic