From 8f4c2fb08df49e13aab32bbac7eb87963f1536bd Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sat, 2 May 2020 22:41:29 +0900 Subject: [PATCH] refactor: py domain: Add type_to_xref() utility --- sphinx/domains/python.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py index 39c7de142..9b34d27c8 100644 --- a/sphinx/domains/python.py +++ b/sphinx/domains/python.py @@ -77,17 +77,19 @@ ModuleEntry = NamedTuple('ModuleEntry', [('docname', str), ('deprecated', bool)]) +def type_to_xref(text: str) -> addnodes.pending_xref: + """Convert a type string to a cross reference node.""" + if text == 'None': + reftype = 'obj' + else: + reftype = 'class' + + return pending_xref('', nodes.Text(text), + refdomain='py', reftype=reftype, reftarget=text) + + def _parse_annotation(annotation: str) -> List[Node]: """Parse type annotation.""" - def make_xref(text: str) -> addnodes.pending_xref: - if text == 'None': - reftype = 'obj' - else: - reftype = 'class' - - return pending_xref('', nodes.Text(text), - refdomain='py', reftype=reftype, reftarget=text) - def unparse(node: ast.AST) -> List[Node]: if isinstance(node, ast.Attribute): return [nodes.Text("%s.%s" % (unparse(node.value)[0], node.attr))] @@ -133,10 +135,10 @@ def _parse_annotation(annotation: str) -> List[Node]: result = unparse(tree) for i, node in enumerate(result): if isinstance(node, nodes.Text): - result[i] = make_xref(str(node)) + result[i] = type_to_xref(str(node)) return result except SyntaxError: - return [make_xref(annotation)] + return [type_to_xref(annotation)] def _parse_arglist(arglist: str) -> addnodes.desc_parameterlist: