Skip to content
This repository was archived by the owner on Apr 9, 2025. It is now read-only.

Commit 9867d52

Browse files
authored
Update compatibility of setup_intersphinx module name check with Sphinx-7.4 (#302)
* Starting sphinx-7.4.0, sphinx.ext.intersphinx is a package, so check for module names prefix rather than full names Signed-off-by: Christian López Barrón <[email protected]> * Adding test for disconnecting the intersphinx listener Signed-off-by: Christian López Barrón <[email protected]> * removing unused imports Signed-off-by: Christian López Barrón <[email protected]> * adding sphinx 74 to tox Signed-off-by: Christian López Barrón <[email protected]> * target explicit intersphinx module name depending on sphinx version Signed-off-by: Christian López Barrón <[email protected]> * check for explicit event listeners presence for missing-reference Signed-off-by: Christian López Barrón <[email protected]> * check handler against sphinx_missing_reference explicitly Signed-off-by: Christian López Barrón <[email protected]> * sphinx.ext.intersphinx.missing_reference continues to be public API in 7.4+ Signed-off-by: Christian López Barrón <[email protected]> --------- Signed-off-by: Christian López Barrón <[email protected]>
1 parent 91c4d87 commit 9867d52

File tree

3 files changed

+27
-6
lines changed

3 files changed

+27
-6
lines changed

hoverxref/extension.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,7 @@ def setup_intersphinx(app, config):
173173
return
174174

175175
for listener in app.events.listeners.get('missing-reference'):
176-
module_name = inspect.getmodule(listener.handler).__name__
177-
if module_name == 'sphinx.ext.intersphinx':
176+
if listener.handler == sphinx_missing_reference:
178177
app.disconnect(listener.id)
179178

180179

tests/test_internals.py

+24-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import inspect
2-
import os
31
import pytest
4-
import shutil
52
from unittest import mock
63

4+
from sphinx.events import EventListener
5+
from sphinx.ext.intersphinx import missing_reference as intersphinx_missing_reference
6+
from hoverxref.extension import missing_reference
7+
78
from .utils import srcdir
89

910

@@ -34,3 +35,23 @@ def _get_docpath(self, builder, docname):
3435
content = open(path).read()
3536

3637
assert app.builder.format == 'latex'
38+
39+
40+
@pytest.mark.sphinx(
41+
srcdir=srcdir,
42+
confoverrides={
43+
'hoverxref_domains': ['py'],
44+
'hoverxref_intersphinx': ['python'],
45+
'hoverxref_auto_ref': True,
46+
'extensions': [
47+
'sphinx.ext.intersphinx',
48+
'hoverxref.extension',
49+
],
50+
},
51+
)
52+
def test_disconnect_intersphinx_listener(app, status, warning):
53+
"""The ``missing-reference`` listener from ``sphinx.ext.intershinx`` should be dropped in favor of ours."""
54+
app.build()
55+
missing_reference_listeners = app.events.listeners['missing-reference']
56+
assert EventListener(id=mock.ANY, priority=mock.ANY, handler=intersphinx_missing_reference) not in missing_reference_listeners
57+
assert EventListener(id=mock.ANY, priority=mock.ANY, handler=missing_reference) in missing_reference_listeners

tox.ini

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ isolated_build = True
44

55
envlist =
66
docs
7-
py{38,39,310,312}-sphinx{50,53,60,62,70,73,latest}
7+
py{38,39,310,312}-sphinx{50,53,60,62,70,73,74,latest}
88

99
[testenv]
1010
deps =
@@ -18,6 +18,7 @@ deps =
1818
sphinx62: sphinx~=6.2.0
1919
sphinx70: sphinx~=7.0.0
2020
sphinx73: sphinx[test]~=7.3.0
21+
sphinx74: sphinx[test]~=7.4.0
2122
sphinxlatest: sphinx[test]
2223

2324
commands = pytest {posargs}

0 commit comments

Comments
 (0)