22
22
from docutils .parsers .rst import directives
23
23
24
24
from sphinx import addnodes
25
- from sphinx .addnodes import desc_signature , pending_xref
25
+ from sphinx .addnodes import desc_signature , pending_xref , pending_xref_condition
26
26
from sphinx .application import Sphinx
27
27
from sphinx .builders import Builder
28
28
from sphinx .deprecation import RemovedInSphinx50Warning
37
37
from sphinx .util .docfields import Field , GroupedField , TypedField
38
38
from sphinx .util .docutils import SphinxDirective
39
39
from sphinx .util .inspect import signature_from_str
40
- from sphinx .util .nodes import make_id , make_refnode
40
+ from sphinx .util .nodes import find_pending_xref_condition , make_id , make_refnode
41
41
from sphinx .util .typing import TextlikeNode
42
42
43
43
logger = logging .getLogger (__name__ )
@@ -92,7 +92,14 @@ def type_to_xref(text: str, env: BuildEnvironment = None) -> addnodes.pending_xr
92
92
else :
93
93
kwargs = {}
94
94
95
- return pending_xref ('' , nodes .Text (text ),
95
+ if env .config .python_use_unqualified_type_names :
96
+ shortname = text .split ('.' )[- 1 ]
97
+ contnodes = [pending_xref_condition ('' , shortname , condition = 'resolved' ),
98
+ pending_xref_condition ('' , text , condition = '*' )] # type: List[Node]
99
+ else :
100
+ contnodes = [nodes .Text (text )]
101
+
102
+ return pending_xref ('' , * contnodes ,
96
103
refdomain = 'py' , reftype = reftype , reftarget = text , ** kwargs )
97
104
98
105
@@ -1209,7 +1216,15 @@ def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder
1209
1216
if obj [2 ] == 'module' :
1210
1217
return self ._make_module_refnode (builder , fromdocname , name , contnode )
1211
1218
else :
1212
- return make_refnode (builder , fromdocname , obj [0 ], obj [1 ], contnode , name )
1219
+ # determine the content of the reference by conditions
1220
+ content = find_pending_xref_condition (node , 'resolved' )
1221
+ if content :
1222
+ children = content .children
1223
+ else :
1224
+ # if not found, use contnode
1225
+ children = [contnode ]
1226
+
1227
+ return make_refnode (builder , fromdocname , obj [0 ], obj [1 ], children , name )
1213
1228
1214
1229
def resolve_any_xref (self , env : BuildEnvironment , fromdocname : str , builder : Builder ,
1215
1230
target : str , node : pending_xref , contnode : Element
@@ -1226,9 +1241,17 @@ def resolve_any_xref(self, env: BuildEnvironment, fromdocname: str, builder: Bui
1226
1241
self ._make_module_refnode (builder , fromdocname ,
1227
1242
name , contnode )))
1228
1243
else :
1244
+ # determine the content of the reference by conditions
1245
+ content = find_pending_xref_condition (node , 'resolved' )
1246
+ if content :
1247
+ children = content .children
1248
+ else :
1249
+ # if not found, use contnode
1250
+ children = [contnode ]
1251
+
1229
1252
results .append (('py:' + self .role_for_objtype (obj [2 ]),
1230
1253
make_refnode (builder , fromdocname , obj [0 ], obj [1 ],
1231
- contnode , name )))
1254
+ children , name )))
1232
1255
return results
1233
1256
1234
1257
def _make_module_refnode (self , builder : Builder , fromdocname : str , name : str ,
@@ -1295,6 +1318,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
1295
1318
app .setup_extension ('sphinx.directives' )
1296
1319
1297
1320
app .add_domain (PythonDomain )
1321
+ app .add_config_value ('python_use_unqualified_type_names' , False , 'env' )
1298
1322
app .connect ('object-description-transform' , filter_meta_fields )
1299
1323
app .connect ('missing-reference' , builtin_resolver , priority = 900 )
1300
1324
0 commit comments