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 RemovedInSphinx40Warning , 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
if False :
@@ -91,7 +91,14 @@ def type_to_xref(text: str, env: BuildEnvironment = None) -> addnodes.pending_xr
91
91
else :
92
92
kwargs = {}
93
93
94
- return pending_xref ('' , nodes .Text (text ),
94
+ if env .config .python_use_unqualified_type_names :
95
+ shortname = text .split ('.' )[- 1 ]
96
+ contnodes = [pending_xref_condition ('' , shortname , condition = 'resolved' ),
97
+ pending_xref_condition ('' , text , condition = '*' )] # type: List[Node]
98
+ else :
99
+ contnodes = [nodes .Text (text )]
100
+
101
+ return pending_xref ('' , * contnodes ,
95
102
refdomain = 'py' , reftype = reftype , reftarget = text , ** kwargs )
96
103
97
104
@@ -1315,7 +1322,15 @@ def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder
1315
1322
if obj [2 ] == 'module' :
1316
1323
return self ._make_module_refnode (builder , fromdocname , name , contnode )
1317
1324
else :
1318
- return make_refnode (builder , fromdocname , obj [0 ], obj [1 ], contnode , name )
1325
+ # determine the content of the reference by conditions
1326
+ content = find_pending_xref_condition (node , 'resolved' )
1327
+ if content :
1328
+ children = content .children
1329
+ else :
1330
+ # if not found, use contnode
1331
+ children = [contnode ]
1332
+
1333
+ return make_refnode (builder , fromdocname , obj [0 ], obj [1 ], children , name )
1319
1334
1320
1335
def resolve_any_xref (self , env : BuildEnvironment , fromdocname : str , builder : Builder ,
1321
1336
target : str , node : pending_xref , contnode : Element
@@ -1332,9 +1347,17 @@ def resolve_any_xref(self, env: BuildEnvironment, fromdocname: str, builder: Bui
1332
1347
self ._make_module_refnode (builder , fromdocname ,
1333
1348
name , contnode )))
1334
1349
else :
1350
+ # determine the content of the reference by conditions
1351
+ content = find_pending_xref_condition (node , 'resolved' )
1352
+ if content :
1353
+ children = content .children
1354
+ else :
1355
+ # if not found, use contnode
1356
+ children = [contnode ]
1357
+
1335
1358
results .append (('py:' + self .role_for_objtype (obj [2 ]),
1336
1359
make_refnode (builder , fromdocname , obj [0 ], obj [1 ],
1337
- contnode , name )))
1360
+ children , name )))
1338
1361
return results
1339
1362
1340
1363
def _make_module_refnode (self , builder : Builder , fromdocname : str , name : str ,
@@ -1397,6 +1420,7 @@ def setup(app: Sphinx) -> Dict[str, Any]:
1397
1420
app .setup_extension ('sphinx.directives' )
1398
1421
1399
1422
app .add_domain (PythonDomain )
1423
+ app .add_config_value ('python_use_unqualified_type_names' , False , 'env' )
1400
1424
app .connect ('object-description-transform' , filter_meta_fields )
1401
1425
app .connect ('missing-reference' , builtin_resolver , priority = 900 )
1402
1426
0 commit comments