@@ -12,11 +12,6 @@ class HoverXRefBaseDomain:
12
12
'hoverxrefmodal' ,
13
13
)
14
14
15
- def _is_hoverxref_configured (self , env ):
16
- project = env .config .hoverxref_project
17
- version = env .config .hoverxref_version
18
- return project and version
19
-
20
15
def _inject_hoverxref_data (self , env , refnode , typ , docname , docpath , labelid ):
21
16
classes = ['hoverxref' ]
22
17
type_class = None
@@ -56,13 +51,28 @@ def _get_docpath(self, builder, docname):
56
51
docpath = docpath .replace (builder .outdir , '' )
57
52
return docpath
58
53
54
+ def _is_ignored_ref (self , env , target ):
55
+ if target in env .config .hoverxref_ignore_refs :
56
+ logger .info (
57
+ 'Ignoring reference in hoverxref_ignore_refs. target=%s' ,
58
+ target ,
59
+ )
60
+ return True
61
+ return False
62
+
59
63
60
64
class HoverXRefPythonDomainMixin (HoverXRefBaseDomain ):
61
65
62
66
def resolve_xref (self , env , fromdocname , builder , typ , target , node , contnode ):
63
67
refnode = super ().resolve_xref (env , fromdocname , builder , typ , target , node , contnode )
64
68
if refnode is None :
65
- return
69
+ return refnode
70
+
71
+ if any ([
72
+ not env .config .hoverxref_is_configured ,
73
+ self ._is_ignored_ref (env , target ),
74
+ ]):
75
+ return refnode
66
76
67
77
modname = node .get ('py:module' )
68
78
clsname = node .get ('py:class' )
@@ -71,16 +81,14 @@ def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode):
71
81
typ , searchmode )
72
82
name , obj = matches [0 ]
73
83
74
- if self ._is_hoverxref_configured (env ):
75
- docname , labelid = obj [0 ], name
76
- docpath = self ._get_docpath (builder , docname )
77
-
78
- self ._inject_hoverxref_data (env , refnode , typ , docname , docpath , labelid )
79
- logger .info (
80
- ':ref: _hoverxref injected: fromdocname=%s %s' ,
81
- fromdocname ,
82
- refnode ._hoverxref ,
83
- )
84
+ docname , labelid = obj [0 ], name
85
+ docpath = self ._get_docpath (builder , docname )
86
+ self ._inject_hoverxref_data (env , refnode , typ , docname , docpath , labelid )
87
+ logger .info (
88
+ ':ref: _hoverxref injected: fromdocname=%s %s' ,
89
+ fromdocname ,
90
+ refnode ._hoverxref ,
91
+ )
84
92
return refnode
85
93
86
94
@@ -107,40 +115,45 @@ def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode):
107
115
def _resolve_ref_xref (self , env , fromdocname , builder , typ , target , node , contnode ):
108
116
refnode = super ()._resolve_ref_xref (env , fromdocname , builder , typ , target , node , contnode )
109
117
if refnode is None :
110
- return
111
-
112
- if not self ._is_hoverxref_configured (env ) and typ in self .hoverxref_types :
113
- # Using ``:hoverxref:`` role without having hoverxref configured
114
- # properly. Log a warning.
115
- logger .warning ('hoverxref role is not fully configured.' )
116
-
117
- if self ._is_hoverxref_configured (env ) and (env .config .hoverxref_auto_ref or typ in self .hoverxref_types ):
118
- docname , labelid , _ = get_ref_xref_data (self , node , target )
119
- docpath = self ._get_docpath (builder , docname )
120
-
121
- self ._inject_hoverxref_data (env , refnode , typ , docname , docpath , labelid )
122
- logger .info (
123
- ':ref: _hoverxref injected: fromdocname=%s %s' ,
124
- fromdocname ,
125
- refnode ._hoverxref ,
126
- )
118
+ return refnode
119
+
120
+ if any ([
121
+ not env .config .hoverxref_is_configured ,
122
+ self ._is_ignored_ref (env , target ),
123
+ not (env .config .hoverxref_auto_ref or typ in self .hoverxref_types )
124
+ ]):
125
+ return refnode
126
+
127
+
128
+ docname , labelid , _ = get_ref_xref_data (self , node , target )
129
+ docpath = self ._get_docpath (builder , docname )
130
+ self ._inject_hoverxref_data (env , refnode , typ , docname , docpath , labelid )
131
+ logger .info (
132
+ ':ref: _hoverxref injected: fromdocname=%s %s' ,
133
+ fromdocname ,
134
+ refnode ._hoverxref ,
135
+ )
127
136
return refnode
128
137
129
138
def _resolve_obj_xref (self , env , fromdocname , builder , typ , target , node , contnode ):
130
139
refnode = super ()._resolve_obj_xref (env , fromdocname , builder , typ , target , node , contnode )
131
140
if refnode is None :
132
- return
133
-
134
- if typ in env .config .hoverxref_roles :
135
- docname , labelid = get_ref_obj_data (self , node , typ , target )
136
- if self ._is_hoverxref_configured (env ):
137
- docpath = self ._get_docpath (builder , docname )
138
-
139
- self ._inject_hoverxref_data (env , refnode , typ , docname , docpath , labelid )
140
- logger .info (
141
- ':%s: _hoverxref injected: fromdocname=%s %s' ,
142
- typ ,
143
- fromdocname ,
144
- refnode ._hoverxref ,
145
- )
141
+ return refnode
142
+
143
+ if any ([
144
+ not env .config .hoverxref_is_configured ,
145
+ self ._is_ignored_ref (env , target ),
146
+ typ not in env .config .hoverxref_roles ,
147
+ ]):
148
+ return refnode
149
+
150
+ docname , labelid = get_ref_obj_data (self , node , typ , target )
151
+ docpath = self ._get_docpath (builder , docname )
152
+ self ._inject_hoverxref_data (env , refnode , typ , docname , docpath , labelid )
153
+ logger .info (
154
+ ':%s: _hoverxref injected: fromdocname=%s %s' ,
155
+ typ ,
156
+ fromdocname ,
157
+ refnode ._hoverxref ,
158
+ )
146
159
return refnode
0 commit comments