summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2019-05-12 14:52:03 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2019-05-12 16:07:04 +0900
commitab668396fc449ecba7788338ea4357fc99dde158 (patch)
tree5821b5053614a0da46a922234adfc63e8edc44f1
parent0d1a66996bf930df37404f9f7cb097407c7673eb (diff)
downloadsphinx-git-ab668396fc449ecba7788338ea4357fc99dde158.tar.gz
Fix #6351: "Hyperlink target is not referenced" message is shown even if referenced
-rw-r--r--CHANGES2
-rw-r--r--sphinx/io.py11
-rw-r--r--sphinx/transforms/references.py19
3 files changed, 30 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index c337b2087..aa94dd076 100644
--- a/CHANGES
+++ b/CHANGES
@@ -96,6 +96,8 @@ Bugs fixed
* commented term in glossary directive is wrongly recognized
* #6299: rst domain: rst:directive directive generates waste space
* #6331: man: invalid output when doctest follows rubric
+* #6351: "Hyperlink target is not referenced" message is shown even if
+ referenced
Testing
--------
diff --git a/sphinx/io.py b/sphinx/io.py
index b5b57d065..5f4ec3351 100644
--- a/sphinx/io.py
+++ b/sphinx/io.py
@@ -16,6 +16,7 @@ from docutils.io import FileInput, NullOutput
from docutils.parsers.rst import Parser as RSTParser
from docutils.readers import standalone
from docutils.statemachine import StringList, string2lines
+from docutils.transforms.references import DanglingReferences
from docutils.writers import UnfilteredWriter
from sphinx.deprecation import RemovedInSphinx30Warning
@@ -64,7 +65,15 @@ class SphinxBaseReader(standalone.Reader):
def get_transforms(self):
# type: () -> List[Type[Transform]]
- return super().get_transforms() + self.transforms
+ transforms = super().get_transforms() + self.transforms
+
+ # remove transforms which is not needed for Sphinx
+ unused = [DanglingReferences]
+ for transform in unused:
+ if transform in transforms:
+ transforms.remove(transform)
+
+ return transforms
def new_document(self):
# type: () -> nodes.document
diff --git a/sphinx/transforms/references.py b/sphinx/transforms/references.py
index de512f437..9cdc28c78 100644
--- a/sphinx/transforms/references.py
+++ b/sphinx/transforms/references.py
@@ -9,7 +9,7 @@
"""
from docutils import nodes
-from docutils.transforms.references import Substitutions
+from docutils.transforms.references import DanglingReferences, Substitutions
from sphinx.transforms import SphinxTransform
@@ -31,6 +31,22 @@ class SubstitutionDefinitionsRemover(SphinxTransform):
node.parent.remove(node)
+class SphinxDanglingReferences(DanglingReferences):
+ """DanglingReferences transform which does not output info messages."""
+
+ def apply(self, **kwargs):
+ # type: (Any) -> None
+ try:
+ reporter = self.document.reporter
+ report_level = reporter.report_level
+
+ # suppress INFO level messages for a while
+ reporter.report_level = max(reporter.WARNING_LEVEL, reporter.report_level)
+ super().apply()
+ finally:
+ reporter.report_level = report_level
+
+
class SphinxDomains(SphinxTransform):
"""Collect objects to Sphinx domains for cross references."""
default_priority = 850
@@ -44,6 +60,7 @@ class SphinxDomains(SphinxTransform):
def setup(app):
# type: (Sphinx) -> Dict[str, Any]
app.add_transform(SubstitutionDefinitionsRemover)
+ app.add_transform(SphinxDanglingReferences)
app.add_transform(SphinxDomains)
return {