summaryrefslogtreecommitdiff
path: root/sphinx/domains/python.py
diff options
context:
space:
mode:
authorjfbu <jfbu@free.fr>2021-02-02 18:01:55 +0100
committerjfbu <jfbu@free.fr>2021-02-02 18:01:55 +0100
commitfbafb308b82a606836fb16f771645fab23bf7305 (patch)
tree10a2850e91df311a49c479b144b697564d36c3d6 /sphinx/domains/python.py
parenta5939ea588bd819614e497a569005a844fe8017d (diff)
parent1cf915f7ddc6e12cf9d67d94b6be27fc95c9c4df (diff)
downloadsphinx-git-fbafb308b82a606836fb16f771645fab23bf7305.tar.gz
Merge branch '3.x' into master_with_merged_3.x
Diffstat (limited to 'sphinx/domains/python.py')
-rw-r--r--sphinx/domains/python.py16
1 files changed, 9 insertions, 7 deletions
diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py
index c07c31e87..80028e2b2 100644
--- a/sphinx/domains/python.py
+++ b/sphinx/domains/python.py
@@ -101,17 +101,19 @@ def _parse_annotation(annotation: str, env: BuildEnvironment = None) -> List[Nod
def unparse(node: ast.AST) -> List[Node]:
if isinstance(node, ast.Attribute):
return [nodes.Text("%s.%s" % (unparse(node.value)[0], node.attr))]
- elif isinstance(node, ast.Constant): # type: ignore
- if node.value is Ellipsis:
- return [addnodes.desc_sig_punctuation('', "...")]
- else:
- return [nodes.Text(node.value)]
+ elif isinstance(node, ast.BinOp):
+ result = unparse(node.left) # type: List[Node]
+ result.extend(unparse(node.op))
+ result.extend(unparse(node.right))
+ return result
+ elif isinstance(node, ast.BitOr):
+ return [nodes.Text(' '), addnodes.desc_sig_punctuation('', '|'), nodes.Text(' ')]
elif isinstance(node, ast.Expr):
return unparse(node.value)
elif isinstance(node, ast.Index):
return unparse(node.value)
elif isinstance(node, ast.List):
- result = [addnodes.desc_sig_punctuation('', '[')] # type: List[Node]
+ result = [addnodes.desc_sig_punctuation('', '[')]
for elem in node.elts:
result.extend(unparse(elem))
result.append(addnodes.desc_sig_punctuation('', ', '))
@@ -157,7 +159,7 @@ def _parse_annotation(annotation: str, env: BuildEnvironment = None) -> List[Nod
tree = ast_parse(annotation)
result = unparse(tree)
for i, node in enumerate(result):
- if isinstance(node, nodes.Text):
+ if isinstance(node, nodes.Text) and node.strip():
result[i] = type_to_xref(str(node), env)
return result
except SyntaxError: