From 70612c610f34a724d35d6ab9be5f09d9d11b2ea4 Mon Sep 17 00:00:00 2001 From: shimizukawa Date: Sat, 14 Mar 2015 18:54:20 +0900 Subject: [PATCH] fix #1772 cross reference in docstrings like ``:param .write:`` breaks building. --- CHANGES | 1 + sphinx/domains/python.py | 16 +++++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/CHANGES b/CHANGES index 6324bdad6..4347daafe 100644 --- a/CHANGES +++ b/CHANGES @@ -8,6 +8,7 @@ Bugs fixed doesn't overwrite existent files/dirs. Thanks to WAKAYAMA shirou. * #1773: sphinx-quickstart doesn't accept non-ASCII character as a option argument. * #1766: the message "least Python 2.6 to run" is at best misleading. +* #1772: cross reference in docstrings like ``:param .write:`` breaks building. Release 1.3 (released Mar 10, 2015) diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py index c9a03de2b..b64e797b0 100644 --- a/sphinx/domains/python.py +++ b/sphinx/domains/python.py @@ -90,13 +90,15 @@ class PyXrefMixin(object): result = super(PyXrefMixin, self).make_xref(rolename, domain, target, innernode, contnode) result['refspecific'] = True - if target.startswith('.'): - result['reftarget'] = target[1:] - result[0][0] = nodes.Text(target[1:]) - if target.startswith('~'): - result['reftarget'] = target[1:] - title = target.split('.')[-1] - result[0][0] = nodes.Text(title) + if target.startswith(('.', '~')): + prefix, result['reftarget'] = target[0], target[1:] + if prefix == '.': + text = target[1:] + elif prefix == '~': + text = target.split('.')[-1] + for node in result.traverse(nodes.Text): + node.parent[node.parent.index(node)] = nodes.Text(text) + break return result