6
6
7
7
class HoverXRefBaseDomain :
8
8
9
- def _is_hoverxref_configured (self , env ):
10
- project = env .config .hoverxref_project
11
- version = env .config .hoverxref_version
12
- return project and version
13
-
14
9
def _inject_hoverxref_data (self , env , refnode , docname , labelid ):
15
10
refnode .replace_attr ('classes' , ['hoverxref' ])
16
11
@@ -23,19 +18,27 @@ def _inject_hoverxref_data(self, env, refnode, docname, labelid):
23
18
'data-section' : labelid ,
24
19
}
25
20
21
+ def _is_ignored_ref (self , env , target ):
22
+ if target in env .config .hoverxref_ignore_refs :
23
+ logger .info (
24
+ 'Ignoring reference in hoverxref_ignore_refs. target=%s' ,
25
+ target ,
26
+ )
27
+ return True
28
+ return False
29
+
26
30
27
31
class HoverXRefPythonDomainMixin (HoverXRefBaseDomain ):
28
32
29
33
def resolve_xref (self , env , fromdocname , builder , type , target , node , contnode ):
30
34
refnode = super ().resolve_xref (env , fromdocname , builder , type , target , node , contnode )
31
35
if refnode is None :
32
- return
36
+ return refnode
33
37
34
- if target in env .config .hoverxref_ignore_refs :
35
- logger .info (
36
- 'Ignoring reference in hoverxref_ignore_refs. target=%s' ,
37
- target ,
38
- )
38
+ if any ([
39
+ not env .config .hoverxref_is_configured ,
40
+ self ._is_ignored_ref (env , target ),
41
+ ]):
39
42
return refnode
40
43
41
44
modname = node .get ('py:module' )
@@ -45,14 +48,13 @@ def resolve_xref(self, env, fromdocname, builder, type, target, node, contnode):
45
48
type , searchmode )
46
49
name , obj = matches [0 ]
47
50
48
- if self ._is_hoverxref_configured (env ):
49
- docname , labelid = obj [0 ], name
50
- self ._inject_hoverxref_data (env , refnode , docname , labelid )
51
- logger .info (
52
- ':ref: _hoverxref injected: fromdocname=%s %s' ,
53
- fromdocname ,
54
- refnode ._hoverxref ,
55
- )
51
+ docname , labelid = obj [0 ], name
52
+ self ._inject_hoverxref_data (env , refnode , docname , labelid )
53
+ logger .info (
54
+ ':ref: _hoverxref injected: fromdocname=%s %s' ,
55
+ fromdocname ,
56
+ refnode ._hoverxref ,
57
+ )
56
58
return refnode
57
59
58
60
@@ -79,43 +81,42 @@ def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode):
79
81
def _resolve_ref_xref (self , env , fromdocname , builder , typ , target , node , contnode ):
80
82
refnode = super ()._resolve_ref_xref (env , fromdocname , builder , typ , target , node , contnode )
81
83
if refnode is None :
82
- return
83
-
84
- if target in env .config .hoverxref_ignore_refs :
85
- logger .info (
86
- 'Ignoring reference in hoverxref_ignore_refs. target=%s' ,
87
- target ,
88
- )
89
84
return refnode
90
85
91
- if not self ._is_hoverxref_configured (env ) and typ == 'hoverxref' :
92
- # Using ``:hoverxref:`` role without having hoverxref configured
93
- # properly. Log a warning.
94
- logger .warning ('hoverxref role is not fully configured.' )
86
+ if any ([
87
+ not env .config .hoverxref_is_configured ,
88
+ self ._is_ignored_ref (env , target ),
89
+ not (env .config .hoverxref_auto_ref or typ == 'hoverxref' )
90
+ ]):
91
+ return refnode
95
92
96
- if self ._is_hoverxref_configured (env ) and (env .config .hoverxref_auto_ref or typ == 'hoverxref' ):
97
- docname , labelid , _ = get_ref_xref_data (self , node , target )
98
- self ._inject_hoverxref_data (env , refnode , docname , labelid )
99
- logger .info (
100
- ':ref: _hoverxref injected: fromdocname=%s %s' ,
101
- fromdocname ,
102
- refnode ._hoverxref ,
103
- )
93
+ docname , labelid , _ = get_ref_xref_data (self , node , target )
94
+ self ._inject_hoverxref_data (env , refnode , docname , labelid )
95
+ logger .info (
96
+ ':ref: _hoverxref injected: fromdocname=%s %s' ,
97
+ fromdocname ,
98
+ refnode ._hoverxref ,
99
+ )
104
100
return refnode
105
101
106
102
def _resolve_obj_xref (self , env , fromdocname , builder , typ , target , node , contnode ):
107
103
refnode = super ()._resolve_obj_xref (env , fromdocname , builder , typ , target , node , contnode )
108
104
if refnode is None :
109
- return
110
-
111
- if typ in env .config .hoverxref_roles :
112
- docname , labelid = get_ref_obj_data (self , node , typ , target )
113
- if self ._is_hoverxref_configured (env ):
114
- self ._inject_hoverxref_data (env , refnode , docname , labelid )
115
- logger .info (
116
- ':%s: _hoverxref injected: fromdocname=%s %s' ,
117
- typ ,
118
- fromdocname ,
119
- refnode ._hoverxref ,
120
- )
105
+ return refnode
106
+
107
+ if any ([
108
+ not env .config .hoverxref_is_configured ,
109
+ self ._is_ignored_ref (env , target ),
110
+ typ not in env .config .hoverxref_roles ,
111
+ ]):
112
+ return refnode
113
+
114
+ docname , labelid = get_ref_obj_data (self , node , typ , target )
115
+ self ._inject_hoverxref_data (env , refnode , docname , labelid )
116
+ logger .info (
117
+ ':%s: _hoverxref injected: fromdocname=%s %s' ,
118
+ typ ,
119
+ fromdocname ,
120
+ refnode ._hoverxref ,
121
+ )
121
122
return refnode
0 commit comments