summaryrefslogtreecommitdiff
path: root/docutils
diff options
context:
space:
mode:
authormilde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2017-05-04 20:10:03 +0000
committermilde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2017-05-04 20:10:03 +0000
commitfc7ea111abc4b8af98efd22bf8702274b083bdf4 (patch)
tree58a37d102e7b8d4cfd1c5f5b3fd15a05baebdf4e /docutils
parent4059d0eb68ba52a231571d64f433057c8c1d2592 (diff)
downloaddocutils-fc7ea111abc4b8af98efd22bf8702274b083bdf4.tar.gz
unroll problematic refs to their origin in document when reporting errors
Patch by Kirill Smelkov. This is part of the (partially outdated) suite of patches on https://sourceforge.net/p/docutils/patches/67/. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk@8067 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'docutils')
-rw-r--r--docutils/docutils/transforms/references.py9
-rwxr-xr-xdocutils/test/test_transforms/test_substitutions.py2
2 files changed, 8 insertions, 3 deletions
diff --git a/docutils/docutils/transforms/references.py b/docutils/docutils/transforms/references.py
index 0642a634a..5e9ea9686 100644
--- a/docutils/docutils/transforms/references.py
+++ b/docutils/docutils/transforms/references.py
@@ -710,6 +710,7 @@ class Substitutions(Transform):
raise CircularSubstitutionDefinitionError
else:
nested[nested_name].append(key)
+ nested_ref['ref-origin'] = ref
subreflist.append(nested_ref)
except CircularSubstitutionDefinitionError:
parent = ref.parent
@@ -721,9 +722,13 @@ class Substitutions(Transform):
line=parent.line, base_node=parent)
parent.replace_self(msg)
else:
+ # find original ref substitution which cased this error
+ ref_origin = ref
+ while ref_origin.hasattr('ref-origin'):
+ ref_origin = ref_origin['ref-origin']
msg = self.document.reporter.error(
- 'Circular substitution definition referenced: "%s".'
- % refname, base_node=ref)
+ 'Circular substitution definition referenced: '
+ '"%s".' % refname, base_node=ref_origin)
msgid = self.document.set_id(msg)
prb = nodes.problematic(
ref.rawsource, ref.rawsource, refid=msgid)
diff --git a/docutils/test/test_transforms/test_substitutions.py b/docutils/test/test_transforms/test_substitutions.py
index c1a05d5a2..150c1d183 100755
--- a/docutils/test/test_transforms/test_substitutions.py
+++ b/docutils/test/test_transforms/test_substitutions.py
@@ -223,7 +223,7 @@ Use |sub| and |indirect1| and |sub| again (and |sub| one more time).
<system_message backrefs="id6" ids="id5" level="3" line="5" source="test data" type="ERROR">
<paragraph>
Circular substitution definition referenced: "sub".
- <system_message backrefs="id8" ids="id7" level="3" source="test data" type="ERROR">
+ <system_message backrefs="id8" ids="id7" level="3" line="5" source="test data" type="ERROR">
<paragraph>
Circular substitution definition referenced: "Sub".
"""],